首页 > 开发 > Java > 正文

Java使用jacob将微软office中word、excel、ppt转成pdf

2019-10-21 18:42:37
字体:
来源:转载
供稿:网友

本文实例为大家分享了Java使用jacob将微软office文档转成pdf的具体代码,供大家参考,具体内容如下

在使用jacb前,我们需要去下载 jacob.jar 和 jacob-1.18-x64.dll

其次,我们需要将jacob-1.18-x64.dll放入到jdk的bin目录下才可以使用

第三,使用jacb之前,我们需要确保office能正常使用

如果你现在使用的是maven工程,那么不好意思,现在还没有发布正式的jacb资源文件,我们需要自定的maven依赖,如下:

<dependency> <groupId>com.jacob</groupId> <artifactId>jacob</artifactId> <version>1.7</version> <scope>system</scope> <systemPath>${basedir}/../fileConvertApp/src/main/webapp/WEB-INF/lib/jacob.jar</systemPath></dependency>

然后需要注意的是jar的地址,需要根据自己的情况修改

接下来我们贴一下具体使用的代码片段

import java.io.File; import org.apache.log4j.Logger; import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant; /** * Converter Util *  * @author Jason * */public class OfficeConverterUtil {  /** * log */ private static Logger logger = Logger.getLogger(OfficeConverterUtil.class); private static final int WDFO_RMATPDF = 17; private static final int XLTYPE_PDF = 0; private static final int PPT_SAVEAS_PDF = 32; public static final int WORD_HTML = 8; public static final int WORD_TXT = 7; public static final int EXCEL_HTML = 44; public static final int PPT_SAVEAS_JPG = 17; // private static final int msoTrue = -1; // private static final int msofalse = 0;  /** * @param argInputFilePath * @param argPdfPath * @return */ public static boolean officeFileConverterToPdf(String argInputFilePath, String argPdfPath) { if (argInputFilePath.isEmpty() || argPdfPath.isEmpty() || getFileSufix(argInputFilePath).isEmpty()) { logger.debug("输入或输出文件路徑有誤!"); return false; }  String suffix = getFileSufix(argInputFilePath);  File file = new File(argInputFilePath); if (!file.exists()) { logger.debug("文件不存在!"); return false; }  // PDF如果不存在则创建文件夹 file = new File(getFilePath(argPdfPath)); if (!file.exists()) { file.mkdir(); }  // 如果输入的路径为PDF 则生成失败 if (suffix.equals("pdf")) { System.out.println("PDF not need to convert!"); return false; }  if (suffix.equals("doc") || suffix.equals("docx") || suffix.equals("txt")) { return wordToPDF(argInputFilePath, argPdfPath); } else if (suffix.equals("xls") || suffix.equals("xlsx")) { return excelToPdf(argInputFilePath, argPdfPath); } else if (suffix.equals("ppt") || suffix.equals("pptx")) { return pptToPdf(argInputFilePath, argPdfPath); // return ppt2PDF(argInputFilePath, argPdfPath); }  return false; }  /** * converter word to pdf *  * @param wordPath * @param pdfPath * @return */ public static boolean wordToPDF(String wordPath, String pdfPath) { ActiveXComponent msWordApp = new ActiveXComponent("Word.Application"); msWordApp.setProperty("Visible", new Variant(false));  Dispatch docs = Dispatch.get(msWordApp, "Documents").toDispatch(); // long pdfStart = System.currentTimeMillis(); Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[] { wordPath, new Variant(false), new Variant(true) }, new int[1]).toDispatch();  deletePdf(pdfPath);  Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { pdfPath, new Variant(WDFO_RMATPDF) }, new int[1]); // long pdfEnd = System.currentTimeMillis(); logger.debug(wordPath + ",pdf转换完成.."); if (null != doc) { Dispatch.call(doc, "Close", false); } return true; }  /** * excel to pdf *  * @param inputFile * @param pdfFile * @return */ public static boolean excelToPdf(String inputFile, String pdfFile) { ActiveXComponent activeXComponent = new ActiveXComponent("Excel.Application"); activeXComponent.setProperty("Visible", false);  deletePdf(pdfFile);  Dispatch excels = activeXComponent.getProperty("Workbooks").toDispatch(); Dispatch excel = Dispatch.call(excels, "Open", inputFile, false, true).toDispatch(); Dispatch.call(excel, "ExportAsFixedFormat", XLTYPE_PDF, pdfFile); Dispatch.call(excel, "Close", false); activeXComponent.invoke("Quit"); return true; }  /** * ppt to pdf *  * @param inputFile * @param pdfFile * @return */ public static boolean pptToPdf(String inputFile, String pdfFile) {// ComThread.InitSTA(); ActiveXComponent activeXComponent = new ActiveXComponent("PowerPoint.Application");// activeXComponent.setProperty("Visible", new Variant(false)); Dispatch ppts = activeXComponent.getProperty("Presentations").toDispatch();  deletePdf(pdfFile);  Dispatch ppt = Dispatch.call(ppts, "Open", inputFile, false, // ReadOnly true, // Untitled指定文件是否有标题 true// WithWindow指定文件是否可见 ).toDispatch(); // Dispatch ppt = Dispatch.invoke(ppts, "Open", Dispatch.Method, new Object[] { inputFile, new Variant(false), new Variant(true) }, new int[1]).toDispatch(); // Dispatch.call(ppt, "SaveAs", pdfFile, PPT_SAVEAS_PDF);// Dispatch.call(ppt, "SaveAs", pdfFile, new Variant(PPT_SAVEAS_PDF));// Dispatch.call(ppt, "SaveAs", pdfFile, new Variant(PPT_SAVEAS_PDF));// Dispatch.invoke(ppt, "SaveAs", Dispatch.Method, new Object[] { pdfFile, PPT_SAVEAS_PDF }, new int[1]);// Dispatch.invoke(ppt, "SaveAs", Dispatch.Method, new Object[] { new Variant(PPT_SAVEAS_PDF) }, new int[1]); Dispatch.callN(ppt, "SaveAs", new Variant(pdfFile));  Dispatch.call(ppt, "Close");  activeXComponent.invoke("Quit");// ComThread.Release(); return true; }  /** * ppt to img *  * @param inputFile * @param imgFile * @return */ public static boolean pptToImg(String inputFile, String imgFile) { // 打开word应用程序 ActiveXComponent app = new ActiveXComponent("PowerPoint.Application"); // 设置word不可见,office可能有限制 // app.setProperty("Visible", false); // 获取word中国所打开的文档,返回Documents对象 Dispatch files = app.getProperty("Presentations").toDispatch(); // 调用Documents对象中Open方法打开文档,并返回打开的文档对象Document Dispatch file = Dispatch.call(files, "open", inputFile, true, true, false).toDispatch(); // 调用Document对象的SaveAs方法,将文档保存为pdf格式 // Dispatch.call(doc, "ExportAsFixedFormat", outputFile, // PPT_TO_PDF); Dispatch.call(file, "SaveAs", imgFile, PPT_SAVEAS_JPG); // 关闭文档 // Dispatch.call(file, "Close", false); Dispatch.call(file, "Close"); // 关闭word应用程序 // app.invoke("Quit", 0); app.invoke("Quit"); return true; }  /** * get file extension *  * @param argFilePath * @return */ public static String getFileSufix(String argFilePath) { int splitIndex = argFilePath.lastIndexOf("."); return argFilePath.substring(splitIndex + 1); }  /** * subString file path *  * @param argFilePath *   file path * @return filePaths */ public static String getFilePath(String argFilePath) { int pathIndex = argFilePath.lastIndexOf("/"); return argFilePath.substring(0, pathIndex); }  /** * 如果PDF存在则删除PDF *  * @param pdfPath */ private static void deletePdf(String pdfPath) { File pdfFile = new File(pdfPath); if (pdfFile.exists()) { pdfFile.delete(); } } }

根据自己的调试,试验一下吧。

另外还有一段WPS转PDF,也贴一下,供大家参考一下

public void wps2PDF(String inputFile,String pdfFile) {   File sFile = new File(inputFile);  File tFile = new File(pdfFile);  ActiveXComponent wps = null;  try {   ComThread.InitSTA();   wps = new ActiveXComponent("wps.application");   ActiveXComponent doc = wps.invokeGetComponent("Documents").invokeGetComponent("Open", new Variant(sFile.getAbsolutePath()));    doc.invoke("ExportPdf", new Variant(tFile.getAbsolutePath()));    doc.invoke("Close");    doc.safeRelease();   } catch (Exception e) {    System.out.println(e.getMessage());   } finally {    if (wps != null) {     wps.invoke("Terminate");     wps.safeRelease();    }   ComThread.Release();  }  } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持CuoXin错新网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表