Java 将word转为pdf jacob方式

时间:2022-11-28 06:40:26
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