package com.doctopdf; import java.io.File; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; /** * 效果最好的一种方法,但是需要 window 环境,而且速度是最慢的需要安装 msofficeWord * * 下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=7 * jacob 包下载地址:http://sourceforge.net/projects/jacob-project/ * 将解压出来的文件 * jacob.jar 放在 E:\jdk1.8.0_14\jre\lib\ext 这里使用自己的jdk安装位置 * jacob.dll 放在 E:\jdk1.8.0_14\jre\bin 这里使用自己的jdk安装位置 * 如果没放或者放错位置,将出现报错 * 注: x86是指32位系统 * x64是指64位系统 * * @author u Y * 支持doc docx文件转pdf */ public class DocToPdf { private static final int wdFormatPDF = 17; // PDF 格式 17表示word转pdf 44表示execl转html public void wordToPDF(String sfileName, String toFileName) { System.out.println("启动 Word..."); long start = System.currentTimeMillis();//转换开始时间 ActiveXComponent app = null; Dispatch doc = null; try { app = new ActiveXComponent("Word.Application"); app.setProperty("Visible", new Variant(false)); Dispatch docs = app.getProperty("Documents").toDispatch(); doc = Dispatch.call(docs, "Open", sfileName).toDispatch(); System.out.println("打开文档..." + sfileName); System.out.println("转换文档到 PDF..." + toFileName); File tofile = new File(toFileName); if (tofile.exists()) { tofile.delete(); } // 作为 html 格式保存到临时文件: 17表示word转pdf 44表示execl转html Dispatch.call(doc, "SaveAs", toFileName, // FileName wdFormatPDF); long end = System.currentTimeMillis();//转换结束时间 System.out.println("转换完成..用时:" + (end - start) + "ms."); } catch (Exception e) { System.out.println("========Error:文档转换失败:" + e.getMessage()); } finally { Dispatch.call(doc, "Close", false); System.out.println("关闭文档"); if (app != null) app.invoke("Quit", new Variant[] {}); } // 如果没有这句话,winword.exe进程将不会关闭 ComThread.Release(); } public static void main(String[] args) { DocToPdf d = new DocToPdf(); d.wordToPDF("C:\\Users\\Administrator\\Desktop\\毕业设计表结构设计.docx", "C:\\Spring.pdf"); } }
需要添加 jacob.jar