今天项目要求做个 Word,Excel 转 PDF 的功能, 百般搜刮, 测试, 终于完成.
下面这个是 Word,Excel,ppt 转 PDF 功能, 支持 doc,docx,xls,xlsx,ppt,pptx 转 PDF
1, 准备工作: Windows 环境, maven 项目, 普通项目也可以
下载 jacob.zip, 地址: https://sourceforge.net/projects/jacob-project/
2, 点击 download 就行, 下载解压后显示的是 jacob-1.19 文件 这个样子
3, 64 位系统就用 x64 的 dll,32 位系统就用 x86 的 dll. 将 dll 文件放入放入 jdk/bin 目录下, 如下图所示:
4, 将压缩包中的 jacob.jar 引入项目
- <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>D:\Maven\maven-repository\jacob\jacob.jar</systemPath>
- </dependency>
5, 上代码
- import com.jacob.activeX.ActiveXComponent;
- import com.jacob.com.ComThread;
- import com.jacob.com.Dispatch;
- import com.jacob.com.Variant;
- public class Demo {
- 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;
- public void docToPdf(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();
- }
- }
- public void pptToPdf(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();
- }
- }
- public void excelToPdf(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();
- // 转换格式
- 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();
- 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();
- }
- }
- public static void main(String[] args) throws Exception {
- String path = "C:\\Users\\lihao\\Desktop\\";
- // new Demo().docToPdf(path + "实习报告. doc", path+ "实习报告. pdf");
- new Demo().excelToPdf(path + "附件 2: 厦门金龙联合汽车工业有限公司推广应用车辆补助资金清算信息明细表 (青岛 2016 年第二批).xls", path+ "附件 2: 厦门金龙联合汽车工业有限公司推广应用车辆补助资金清算信息明细表 (青岛 2016 年第二批).pdf");
- // new Demo().pptToPdf(path + "1.pptx", path + "1.pdf");
- }
- }
来源: http://www.bubuko.com/infodetail-2848598.html