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

网友投稿 445 2023-01-16


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

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

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

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

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

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

com.jacob

jacob

1.7

system

${basedir}/../fileConvertApp/src/main/webapp/WEB-INF/lib/jacob.jar

然后需要注意的是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 staMCEusKbDEtic 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();

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:数据接口约定管理工具(数据接口约定管理工具有哪些)
下一篇:Java操作XML工具类XmlUtil详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~