博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
word、excel、ppt转PDF文件
阅读量:6295 次
发布时间:2019-06-22

本文共 5826 字,大约阅读时间需要 19 分钟。

今天项目要求做个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引入项目

com.google.guava
guava
19.0
com.jacob
jacob
1.18-M2
system
D:\Maven\maven-repository\jacob\jacob.jar

5、上代码

1 import com.jacob.activeX.ActiveXComponent;  2 import com.jacob.com.ComThread;  3 import com.jacob.com.Dispatch;  4 import com.jacob.com.Variant;  5   6 public class Demo {  7     private static final Integer WORD_TO_PDF_OPERAND = 17;  8     private static final Integer PPT_TO_PDF_OPERAND = 32;  9     private static final Integer EXCEL_TO_PDF_OPERAND = 0; 10      11     public void docToPdf(String srcFilePath, String pdfFilePath) throws Exception {   12         ActiveXComponent app = null;   13         Dispatch doc = null;   14         try {   15             ComThread.InitSTA();   16             app = new ActiveXComponent("Word.Application");   17             app.setProperty("Visible", false);   18             Dispatch docs = app.getProperty("Documents").toDispatch();  19             Object[] obj = new Object[]{ 20                     srcFilePath,  21                     new Variant(false),   22                     new Variant(false),//是否只读   23                     new Variant(false),    24                     new Variant("pwd") 25             }; 26             doc = Dispatch.invoke(docs, "Open", Dispatch.Method, obj, new int[1]).toDispatch();   27 //          Dispatch.put(doc, "Compatibility", false);  //兼容性检查,为特定值false不正确   28             Dispatch.put(doc, "RemovePersonalInformation", false);   29             Dispatch.call(doc, "ExportAsFixedFormat", pdfFilePath, WORD_TO_PDF_OPERAND); // word保存为pdf格式宏,值为17   30    31         }catch (Exception e) {   32             e.printStackTrace(); 33             throw e; 34         } finally {   35             if (doc != null) {   36                 Dispatch.call(doc, "Close", false);   37             }   38             if (app != null) {   39                 app.invoke("Quit", 0);   40             }   41             ComThread.Release();   42         }   43     }   44      45     public void pptToPdf(String srcFilePath, String pdfFilePath) throws Exception { 46         ActiveXComponent app = null; 47         Dispatch ppt = null; 48         try { 49             ComThread.InitSTA(); 50             app = new ActiveXComponent("PowerPoint.Application"); 51             Dispatch ppts = app.getProperty("Presentations").toDispatch(); 52  53             /* 54              * call  55              * param 4: ReadOnly 56              * param 5: Untitled指定文件是否有标题 57              * param 6: WithWindow指定文件是否可见 58              * */ 59             ppt = Dispatch.call(ppts, "Open", srcFilePath, true,true, false).toDispatch(); 60             Dispatch.call(ppt, "SaveAs", pdfFilePath, PPT_TO_PDF_OPERAND); // ppSaveAsPDF为特定值32 61  62         } catch (Exception e) { 63             e.printStackTrace(); 64             throw e; 65         } finally { 66             if (ppt != null) { 67                 Dispatch.call(ppt, "Close"); 68             } 69             if (app != null) { 70                 app.invoke("Quit"); 71             } 72             ComThread.Release(); 73         } 74     } 75      76     public void excelToPdf(String inFilePath, String outFilePath) throws Exception { 77         ActiveXComponent ax = null; 78         Dispatch excel = null; 79         try { 80             ComThread.InitSTA(); 81             ax = new ActiveXComponent("Excel.Application"); 82             ax.setProperty("Visible", new Variant(false)); 83             ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏 84             Dispatch excels = ax.getProperty("Workbooks").toDispatch(); 85  86             Object[] obj = new Object[]{  87                     inFilePath,  88                     new Variant(false), 89                     new Variant(false)  90              }; 91             excel = Dispatch.invoke(excels, "Open", Dispatch.Method, obj, new int[9]).toDispatch(); 92              93             // 转换格式 94             Object[] obj2 = new Object[]{  95                     new Variant(EXCEL_TO_PDF_OPERAND), // PDF格式=0 96                     outFilePath,  97                     new Variant(0)  //0=标准 (生成的PDF图片不会变模糊) ; 1=最小文件 98             }; 99             Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method,obj2, new int[1]);100 101         } catch (Exception es) {102             es.printStackTrace();103             throw es;104         } finally {105             if (excel != null) {106                 Dispatch.call(excel, "Close", new Variant(false));107             }108             if (ax != null) {109                 ax.invoke("Quit", new Variant[] {});110                 ax = null;111             }112             ComThread.Release();113         }114 115     }116     117     public static void main(String[] args) throws Exception {118         String path = "C:\\Users\\lihao\\Desktop\\";119 //        new Demo().docToPdf(path + "实习报告.doc", path+ "实习报告.pdf");120         new Demo().excelToPdf(path + "附件2:厦门金龙联合汽车工业有限公司推广应用车辆补助资金清算信息明细表(青岛2016年第二批).xls", path+ "附件2:厦门金龙联合汽车工业有限公司推广应用车辆补助资金清算信息明细表(青岛2016年第二批).pdf");121 //        new Demo().pptToPdf(path + "1.pptx", path + "1.pdf");122         123     }124     125 126 127 }

6、本文主要参考自:   https://www.cnblogs.com/xxyfhjl/p/6773786.html

 

转载于:https://www.cnblogs.com/lvgeaibingyue/p/9966054.html

你可能感兴趣的文章
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>
sql操作命令
查看>>
zip 数据压缩
查看>>
Python爬虫学习系列教程
查看>>
【数据库优化专题】MySQL视图优化(二)
查看>>
【转载】每个程序员都应该学习使用Python或Ruby
查看>>
PHP高级编程之守护进程,实现优雅重启
查看>>
PHP字符编码转换类3
查看>>
rsync同步服务配置手记
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>
iOS 多线程总结
查看>>
webpack是如何实现前端模块化的
查看>>
TCP的三次握手四次挥手
查看>>
关于redis的几件小事(六)redis的持久化
查看>>