前期准備:
我的環境:jdk1.8, maven 3.3.9, office2010
工具下載: jacob.zip
下載地址: https://pan.baidu.com/s/15ro6zlpfCgo0mopOJkWXMg 提取碼:BRr8
https://files.cnblogs.com/files/onop/jacob_1.19.zip
環境配置:
下載完jacob解壓后:
將上圖畫圈的(電腦是64就用64那個,32就用86那個)復制到jdk bin目錄下:
然后將解壓后的 jacob-1.19 文件復制到maven的庫里面:
最后就是pom.xml文件的配置:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency> <dependency> <groupId>com.jacob</groupId> <artifactId>jacob</artifactId> <version>1.18-M2</version> <scope>system</scope> <systemPath>E:/data/maven_repository/jacob-1.19/jacob.jar</systemPath> </dependency>
轉化的代碼:
import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant;
private static final Integer WORD_TO_PDF_OPERAND = 17; private static final Integer PPT_TO_PDF_OPERAND = 32; private static final Integer EXCEL_TO_PDF_OPERAND = 0; private void doc2pdf(String srcFilePath, String pdfFilePath) throws Exception { ActiveXComponent app = null; Dispatch doc = null; try { ComThread.InitSTA(); app = new ActiveXComponent("Word.Application"); app.setProperty("Visible", false); Dispatch docs = app.getProperty("Documents").toDispatch(); Object[] obj = new Object[]{ srcFilePath, new Variant(false), new Variant(false),//是否只讀 new Variant(false), new Variant("pwd") }; doc = Dispatch.invoke(docs, "Open", Dispatch.Method, obj, new int[1]).toDispatch(); // Dispatch.put(doc, "Compatibility", false); //兼容性檢查,為特定值false不正確 Dispatch.put(doc, "RemovePersonalInformation", false); Dispatch.call(doc, "ExportAsFixedFormat", pdfFilePath, WORD_TO_PDF_OPERAND); // word保存為pdf格式宏,值為17 }catch (Exception e) { e.printStackTrace(); throw e; } finally { if (doc != null) { Dispatch.call(doc, "Close", false); } if (app != null) { app.invoke("Quit", 0); } ComThread.Release(); } } private void ppt2pdf(String srcFilePath, String pdfFilePath) throws Exception { ActiveXComponent app = null; Dispatch ppt = null; try { ComThread.InitSTA(); app = new ActiveXComponent("PowerPoint.Application"); Dispatch ppts = app.getProperty("Presentations").toDispatch(); /* * call * param 4: ReadOnly * param 5: Untitled指定文件是否有標題 * param 6: WithWindow指定文件是否可見 * */ ppt = Dispatch.call(ppts, "Open", srcFilePath, true,true, false).toDispatch(); Dispatch.call(ppt, "SaveAs", pdfFilePath, PPT_TO_PDF_OPERAND); // ppSaveAsPDF為特定值32 } catch (Exception e) { e.printStackTrace(); throw e; } finally { if (ppt != null) { Dispatch.call(ppt, "Close"); } if (app != null) { app.invoke("Quit"); } ComThread.Release(); } } private static boolean excel2Pdf(String inFilePath, String outFilePath) throws Exception { ActiveXComponent ax = null; Dispatch excel = null; try { ComThread.InitSTA(); ax = new ActiveXComponent("Excel.Application"); ax.setProperty("Visible", new Variant(false)); ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏 Dispatch excels = ax.getProperty("Workbooks").toDispatch(); Object[] obj = new Object[]{ inFilePath, new Variant(false), new Variant(false) }; excel = Dispatch.invoke(excels, "Open", Dispatch.Method, obj, new int[9]).toDispatch(); //將excel表格 設置成A3的大小 Dispatch sheets = Dispatch.call(excel, "Worksheets").toDispatch(); Dispatch sheet = Dispatch.call(sheets, "Item", new Integer(1)).toDispatch(); Dispatch pageSetup = Dispatch.call(sheet, "PageSetup").toDispatch(); Dispatch.put(pageSetup, "PaperSize", new Integer(8));//A3是8,A4是9,A5是11等等 // 轉換格式 Object[] obj2 = new Object[]{ new Variant(EXCEL_TO_PDF_OPERAND), // PDF格式=0 outFilePath, new Variant(0) //0=標准 (生成的PDF圖片不會變模糊) ; 1=最小文件 }; Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method,obj2, new int[1]); } catch (Exception es) { es.printStackTrace(); return false; // throw es; } finally { if (excel != null) { Dispatch.call(excel, "Close", new Variant(false)); } if (ax != null) { ax.invoke("Quit", new Variant[] {}); ax = null; } ComThread.Release(); } return true; }
參考文獻:https://www.cnblogs.com/xxyfhjl/p/6773786.html