java仿百度文庫-使用SWFTools轉換pdf檔案
阿新 • • 發佈:2018-12-25
/** * */ package com.zxjxw.framework.util; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author nlb * @version 1.0 把pdf,jpeg,font,gif,pgn,wav轉化為swf檔案 */ public class ConvertToSwf { Log log = LogFactory.getLog(ConvertToSwf.class); private final String CONVERTFILETYPE = "pdf,jpg,jpeg,font,gif,png,wav"; private String swftoolsPath; /** * @param swftoolsPath * 用於進行把檔案轉化為swf的工具地址 */ public ConvertToSwf(String swftoolsPath) { this.swftoolsPath=swftoolsPath; } /** * 把檔案轉化為swf格式支援"pdf,jpg,jpeg,font,gif,png,wav" * * @param sourceFilePath * 要進行轉化為swf檔案的地址 * @param swfFilePath * 轉化後的swf的檔案地址 * @return */ public boolean convertFileToSwf(String sourceFilePath, String swfFilePath) { log.info("開始轉化檔案到swf格式"); if (swftoolsPath == null || swftoolsPath == "") { if (log.isWarnEnabled()) { log.warn("未指定要進行swf轉化工具的地址!!!"); } return false; } String filetype = sourceFilePath.substring(sourceFilePath .lastIndexOf(".") + 1); // 判讀上傳檔案型別是否符合轉換為pdf log.info("判斷檔案型別通過"); if (CONVERTFILETYPE.indexOf(filetype.toLowerCase()) == -1) { if (log.isWarnEnabled()) { log.warn("當前檔案不符合要轉化為SWF的檔案型別!!!"); } return false; } File sourceFile = new File(sourceFilePath); if (!sourceFile.exists()) { if (log.isWarnEnabled()) { log.warn("要進行swf的檔案不存在!!!"); } return false; } log.info("準備轉換的檔案路徑存在"); if (!swftoolsPath.endsWith(File.separator)) { swftoolsPath += File.separator; } StringBuilder commandBuidler = new StringBuilder(swftoolsPath); File swfFile = new File(swfFilePath); if (!swfFile.getParentFile().exists()) { swfFile.getParentFile().mkdirs(); } if (filetype.toLowerCase().equals("jpg")) { filetype = "jpeg"; } List<String> command = new ArrayList<String>(); command.add(this.swftoolsPath+"\\"+filetype.toLowerCase()+"2swf.exe");//從配置檔案裡讀取 command.add("-z"); command.add("-s"); command.add("flashversion=9"); command.add("-s"); command.add("poly2bitmap");//加入poly2bitmap的目的是為了防止出現大檔案或圖形過多的檔案轉換時的出錯,沒有生成swf檔案的異常 command.add(sourceFilePath); command.add("-o"); command.add(swfFilePath); try { ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command(command); Process process = processBuilder.start(); log.info("開始生成swf檔案.."); dealWith(process); try { process.waitFor();//等待子程序的結束,子程序就是系統呼叫檔案轉換這個新程序 } catch (InterruptedException e) { e.printStackTrace(); } File swf = new File(swfFilePath); if (!swf.exists()) { return false; } log.info("轉化SWF檔案成功!!!"); } catch (IOException e) { // TODO Auto-generated catch block log.error("轉化為SWF檔案失敗!!!"); e.printStackTrace(); return false; } return true; } public static void main(String[] args) { ConvertToSwf a=new ConvertToSwf("D:\\Program Files\\SWFTools"); a.convertFileToSwf("D:\\aa.pdf", "D:\\bb.swf"); } private void dealWith(final Process pro){ // 下面是處理堵塞的情況 try { new Thread(){ public void run(){ BufferedReader br1 = new BufferedReader(new InputStreamReader(pro.getInputStream())); String text; try { while ( (text = br1.readLine()) != null) { System.out.println(text); } } catch (IOException e) { e.printStackTrace(); } } }.start(); } catch (Exception e) { e.printStackTrace(); } try { new Thread(){ public void run(){ BufferedReader br2 = new BufferedReader(new InputStreamReader(pro.getErrorStream()));//這定不要忘記處理出理時產生的資訊,不然會堵塞不前的 String text; try { while( (text = br2.readLine()) != null){ System.err.println(text); } } catch (IOException e) { e.printStackTrace(); } } }.start(); } catch (Exception e) { e.printStackTrace(); } } }