
這三種方法我都有試過word轉PDF,第2種、第3種對於圖片,表格、中文轉換效果都不好,方法1效果最好。但方法1 只支持Windows環境下。
1.開發環境
Windows系統;
2.准備工作:
step1:下載jacob文件,里面包含jacob.jar、jacob-版本號-x64.dll,jacob-版本號-x86.dll三個文件。
step2:a.把dll文件放在%JAVA_HOME%\bin下(注意系統是32位還是64位),也可以放在C:\Windows\System32下,如果是64位應該放在C:\Windows\SysWOW64 下。建議放在jdk的bin目錄下
b.如果是在eclipse下開發,需要重新引入jdk(Preference/Java/Installed JREs);
c.將jacab.jar包放在項目lib下並add到liabraries中即可.
3.代碼:
Word.Excel、PPT文件轉PDDF(注意自己電腦注冊表是office還是WPS,決定了代碼里的ActiveXComponent使用選擇,我的是office,在引用資料里有使用WPS的案例)
/** * 調用轉PDF的方法 * @param inputFile 傳入文件路徑 * @param ouputFile 生成文件路徑 * @return */ public static boolean PdfManager(String inputFile,String ouputFile) { boolean flag = TransferToPDFUtil.convert2PDF(inputFile, ouputFile); return flag; } /*** * 判斷文件類型 * * @param fileName * @return */ public static String getFileSufix(String fileName) { int splitIndex = fileName.lastIndexOf("."); return fileName.substring(splitIndex + 1); } /*** * 判斷需要轉化文件的類型(Excel、Word、ppt) * * @param inputFile 傳入文件 * @param pdfFile 轉化文件 */ public static boolean convert2PDF(String inputFile, String pdfFile) { String suffix = getFileSufix(inputFile); File file = new File(inputFile); if (!file.exists()) { System.out.println("文件不存在!"); return false; } if (suffix.equals("pdf")) { System.out.println("PDF not need to convert!"); return true; } if (suffix.equals("doc") || suffix.equals("docx")) { return word2PDF(inputFile, pdfFile); } else if (suffix.equals("ppt") || suffix.equals("pptx")) { return ppt2PDF(inputFile, pdfFile); } else if (suffix.equals("xls") || suffix.equals("xlsx")) { return excel2PDF(inputFile, pdfFile); } else { System.out.println("文件格式不支持轉換!"); return false; } }
/*** * * Word轉PDF * * @param inputFile * @param pdfFile * @return */ private static boolean word2PDF(String inputFile, String pdfFile) { try { ActiveXComponent app = new ActiveXComponent("Word.Application"); app.setProperty("Visible", false); Dispatch docs = app.getProperty("Documents").toDispatch(); Dispatch doc = Dispatch.call(docs, "Open", inputFile, false, true) .toDispatch(); File tofile = new File(pdfFile); if (tofile.exists()) { tofile.delete(); } Dispatch.call(doc, "ExportAsFixedFormat", pdfFile, wdFormatPDF ); Dispatch.call(doc, "Close", false); app.invoke("Quit", 0); File fromfile = new File(inputFile); if (fromfile.exists()) { fromfile.delete(); } return true; } catch (Exception e) { return false; } } private static boolean excel2PDF(String inputFile, String pdfFile) { try { ActiveXComponent app = new ActiveXComponent("Excel.Application"); app.setProperty("Visible", false); Dispatch excels = app.getProperty("Workbooks").toDispatch(); Dispatch excel = Dispatch.call(excels, "Open", inputFile, false, true).toDispatch(); File tofile = new File(pdfFile); if (tofile.exists()) { tofile.delete(); } Dispatch.call(excel, "ExportAsFixedFormat", xlsFormatPDF, pdfFile); Dispatch.call(excel, "Close", false); app.invoke("Quit"); File fromfile = new File(inputFile); if (fromfile.exists()) { fromfile.delete(); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } private static boolean ppt2PDF(String inputFile, String pdfFile) { try { ActiveXComponent app = new ActiveXComponent( "PowerPoint.Application"); Dispatch ppts = app.getProperty("Presentations").toDispatch(); Dispatch ppt = Dispatch.call(ppts, "Open", inputFile, true,// ReadOnly true,// Untitled指定文件是否有標題 false// WithWindow指定文件是否可見 ).toDispatch(); File tofile = new File(pdfFile); if (tofile.exists()) { tofile.delete(); } Dispatch.call(ppt, "SaveAs", pdfFile, pptFormatPDF); Dispatch.call(ppt, "Close"); app.invoke("Quit"); File fromfile = new File(inputFile); if (fromfile.exists()) { fromfile.delete(); } return true; } catch (Exception e) { e.printStackTrace(); return false; } }
