100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java利用Jacob实现excel ppt word转pdf 及jacob遇到的坑

Java利用Jacob实现excel ppt word转pdf 及jacob遇到的坑

时间:2023-02-22 12:49:56

相关推荐

Java利用Jacob实现excel ppt word转pdf 及jacob遇到的坑

Jacob官方的解释是Java COM Bridge,即java和com组件间的桥梁。需要注意的是,由于操作Jacob需要使用动态链接库(.dll)文件,所以Jacob仅支持在windows平台使用,Linux无法使用。使用jacob需要用的jar包,以及jacob.dll文件,也就是上面说到的com组件,博主分享两个版本,一个1.17,一个1.18,本人项目中用的是1.17

1.17:点击提取,密码:mwed

1.18:点击提取,密码:s4kg

入门了解后,在此说明用法以及博主在服务器端使用时遇到的坑:

1.首先直接将jar放至lib目录下,将dll文件放至C:\Windows\System32目录下,本地直接测试成功,可以完美实现word,excel,ppt转换成pdf格式。

2.将项目放至windows服务器后,如果报错找不到dll文件或者类,可通过以下方式解决:

在确保C:\Windows\System32目录页有一份jacob.dll之外,还要在jdk的bin目录下放jacob版本对应的dll,在jdk的jre下的bin也放一份dll项目中导入相应的jar包后,如果找不到类,可以将jar拷贝一份至jdk\jre\lib\ext下,或者tomcat/lib下,都要尝试一下最后如果可以正常运行,没有报错,但pdf生成失败,如果不是权限的问题(即写入文件的权限),要在在"C:\Windows\SysWOW64\config\systemprofile"和"C:\Windows\System32\config\systemprofile"这两个路径下创建Desktop文件夹以上方法都要一步一步的试,出现相应问题找相应方法,不要一上来就把文件拷贝多份放至每个文件夹

相关代码:

public class PDFUtil {private static final int wdFormatPDF = 17;private static final int xlTypePDF = 0;private static final int ppSaveAsPDF = 32;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 static void main(String[] args) {//path:原文档路径,也可以为一个网络地址//pdfPath为生成的pdf文件路径String path = "F:/test.doc";String pdfPath = "F:/test.pdf";boolean bo = PDFUtil.word2PDF(path,pdfPath);if(bo){System.out.println("转换完成!");}else{System.out.println("转换失败!");}}// word转换为pdfpublic static boolean word2PDF(String inputFile, String pdfFile) {try {// 打开word应用程序ActiveXComponent app = new ActiveXComponent("Word.Application");// 设置word不可见app.setProperty("Visible", false);// 获得word中所有打开的文档,返回Documents对象Dispatch docs = app.getProperty("Documents").toDispatch();// 调用Documents对象中Open方法打开文档,并返回打开的文档对象DocumentDispatch doc = Dispatch.call(docs, "Open", inputFile, false, true).toDispatch();// 调用Document对象的SaveAs方法,将文档保存为pdf格式/** Dispatch.call(doc, "SaveAs", pdfFile, wdFormatPDF* //word保存为pdf格式宏,值为17 );*/Dispatch.call(doc, "ExportAsFixedFormat", pdfFile, wdFormatPDF);// word保存为pdf格式宏,值为17// 关闭文档Dispatch.call(doc, "Close", false);// 关闭word应用程序app.invoke("Quit", 0);return true;} catch (Exception e) {return false;}}// excel转换为pdfpublic 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();Dispatch.call(excel, "ExportAsFixedFormat", xlTypePDF, pdfFile);Dispatch.call(excel, "Close", false);app.invoke("Quit");return true;} catch (Exception e) {return false;}}// ppt转换为pdfpublic static boolean ppt2PDF(String inputFile, String pdfFile) {try {ActiveXComponent app = new ActiveXComponent("PowerPoint.Application");// app.setProperty("Visible", msofalse);Dispatch ppts = app.getProperty("Presentations").toDispatch();Dispatch ppt = Dispatch.call(ppts, "Open", inputFile, true,// ReadOnlytrue,// Untitled指定文件是否有标题false// WithWindow指定文件是否可见).toDispatch();Dispatch.call(ppt, "SaveAs", pdfFile, ppSaveAsPDF);Dispatch.call(ppt, "Close");app.invoke("Quit");return true;} catch (Exception e) {return false;}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。