(四)java實現文件的線上瀏覽-使用swftools將pdf轉換為swf
阿新 • • 發佈:2019-01-22
利用swftools工具將pdf轉換為swf,建議下載swftools-0.9.1.
新建PDF2SWFUtil.java
package com.iori.webapp.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class PDF2SWFUtil { /** * 利用SWFTools工具將pdf轉換成swf,轉換完後的swf檔案與pdf同名 * @author iori * @param fileDir PDF檔案存放路徑(包括檔名) * @param exePath 轉換器安裝路徑 * @throws IOException */ public static synchronized void pdf2swf(String fileDir, String exePath) throws IOException { //檔案路徑 String filePath = fileDir.substring(0, fileDir.lastIndexOf("/")); //檔名,不帶字尾 String fileName = fileDir.substring((filePath.length() + 1), fileDir.lastIndexOf(".")); Process pro = null; if (isWindowsSystem()) { //如果是windows系統 //命令列命令 String cmd = exePath + " \"" + fileDir + "\" -o \"" + filePath + "/" + fileName + ".swf\""; //Runtime執行後返回建立的程序物件 pro = Runtime.getRuntime().exec(cmd); } else { //如果是linux系統,路徑不能有空格,而且一定不能用雙引號,否則無法建立程序 String[] cmd = new String[3]; cmd[0] = exePath; cmd[1] = fileDir; cmd[2] = filePath + "/" + fileName + ".swf"; //Runtime執行後返回建立的程序物件 pro = Runtime.getRuntime().exec(cmd); } //非要讀取一遍cmd的輸出,要不不會flush生成檔案(多執行緒) new DoOutput(pro.getInputStream()).start(); new DoOutput(pro.getErrorStream()).start(); try { //呼叫waitFor方法,是為了阻塞當前程序,直到cmd執行完 pro.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 判斷是否是windows作業系統 * @author iori * @return */ private static boolean isWindowsSystem() { String p = System.getProperty("os.name"); return p.toLowerCase().indexOf("windows") >= 0 ? true : false; } /** * 多執行緒內部類 * 讀取轉換時cmd程序的標準輸出流和錯誤輸出流,這樣做是因為如果不讀取流,程序將死鎖 * @author iori */ private static class DoOutput extends Thread { public InputStream is; //構造方法 public DoOutput(InputStream is) { this.is = is; } public void run() { BufferedReader br = new BufferedReader(new InputStreamReader(this.is)); String str = null; try { //這裡並沒有對流的內容進行處理,只是讀了一遍 while ((str = br.readLine()) != null); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } } /** * 測試main方法 * @param args */ public static void main(String[] args) { //轉換器安裝路徑 String exePath = "c:/Program Files/SWFTools/pdf2swf.exe"; try { PDF2SWFUtil.pdf2swf("c:/temp/333.pdf", exePath); } catch (IOException e) { System.err.println("轉換出錯!"); e.printStackTrace(); } } }
在PDF2SWFUtil.java,右鍵屬性 - >Run as - >Java Application ,輸出main的測試結果。
在jsp中執行
新建MyPDF2SWFTest.jsp
<%@ page import="java.io.*"%> <%@ page import="com.artofsolving.jodconverter.openoffice.connection.*"%> <%@ page import="com.artofsolving.jodconverter.openoffice.connection.*"%> <%@ page import="com.artofsolving.jodconverter.openoffice.converter.*"%> <%@ page import="com.artofsolving.jodconverter.*"%> <%@ page import="java.util.*"%> <%@ page import="com.iori.webapp.util.*"%> <% //轉換器安裝路徑 String exePath = "c:/Program Files/SWFTools/pdf2swf.exe"; try { PDF2SWFUtil.pdf2swf("c:/temp/333.pdf", exePath); } catch (IOException e) { System.err.println("轉換出錯!"); e.printStackTrace(); } %> <!-- 下面這些html可以去掉 --> <html> <head> <title>Simple jsp page</title> </head> <body>Place your content here</body> </html>
在專案DocConverter根目錄,右鍵屬性 - >Run as - >MyEclipse Server Application