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

 更新时间:2018年12月19日 16:29:46   作者:jesionsly  
这篇文章主要为大家详细介绍了Java使用jacob将微软office中word、excel、ppt转成pdf,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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();
  } 
 } 

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

相关文章

  • Java SiteMesh新手学习教程代码案例

    Java SiteMesh新手学习教程代码案例

    这篇文章主要介绍了Java SiteMesh新手学习教程代码案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 详解如何继承Mybatis中Mapper.xml文件

    详解如何继承Mybatis中Mapper.xml文件

    这篇文章主要为大家介绍了详解如何继承Mybatis中Mapper.xml文件,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Java数据结构之有效队列定义与用法示例

    Java数据结构之有效队列定义与用法示例

    这篇文章主要介绍了Java数据结构之有效队列定义与用法,结合实例形式分析了java有效队列的数据插入、删除、判断、计算等相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • 修改maven本地仓库路径的方法

    修改maven本地仓库路径的方法

    本篇文章主要介绍了修改maven本地仓库路径的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 使用Java实现在Excel中创建下拉列表

    使用Java实现在Excel中创建下拉列表

    下拉列表(下拉框)可以确保用户仅从预先给定的选项中进行选择,这样不仅能减少数据输入错误,还能节省时间提高效率,下面我们就来看看如何在java中利用免费库实现创建下拉列表吧
    2024-03-03
  • Java数据结构之红黑树的实现方法和原理详解

    Java数据结构之红黑树的实现方法和原理详解

    这篇文章主要介绍了Java数据结构之红黑树的实现方法和原理,红黑树是一种特殊的二叉查找树,每个结点都要储存位表示结点的颜色,或红或黑,本文将通过示例为大家详细讲讲红黑树的原理及实现,感兴趣的朋友可以了解一下
    2024-02-02
  • 说说@ModelAttribute在父类和子类中的执行顺序

    说说@ModelAttribute在父类和子类中的执行顺序

    这篇文章主要介绍了@ModelAttribute在父类和子类中的执行顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 使用SpringAop动态获取mapper执行的SQL,并保存SQL到Log表中

    使用SpringAop动态获取mapper执行的SQL,并保存SQL到Log表中

    这篇文章主要介绍了使用SpringAop动态获取mapper执行的SQL,并保存SQL到Log表中问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • java显示当前运行时的参数(java运行参数)

    java显示当前运行时的参数(java运行参数)

    这篇文章主要介绍了java显示当前运行时参数的示例(java运行参数),需要的朋友可以参考下
    2014-04-04
  • Java中Long类型传入前端数值出错问题

    Java中Long类型传入前端数值出错问题

    这篇文章主要介绍了Java中Long类型传入前端数值出错问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04

最新评论