一个将word转换为PDF的方法(复杂word格式不失真)

使用的是微软官方的Microsoft Save as PDF,这个其实是微软的office办公组件的一个插件,安装这个可以使办公组件拥有一键转换为pdf的功能,支持的组件包含:
Microsoft Office Access 2007
Microsoft Office Excel 2007
Microsoft Office InfoPath 2007
Microsoft Office OneNote 2007
Microsoft Office PowerPoint 2007
Microsoft Office Publisher 2007
Microsoft Office Visio 2007
Microsoft Office Word 2007
在系统中有office的情况下,下载或者安装上述的插件,即可。例如,打开word直接另存,选择pdf格式即可。

由于项目需求,需要java后台导出同一报表的word和pdf格式,因此考虑到先使用word模板生成word格式报表,然后将word报表通过上述的组件直接转换为pdf提供下载。
具体步骤如下:
1.首先在项目要部署的服务器上安装office办公软件(这就限制了这种方法必须保证服务器系统是windows的)
2.在1的基础上安装Microsoft Save as PDF。
3.给项目添加jacob的jar包依赖。
4.将jacob-1.19-x64.dll和jacob-1.19-x86.dll两个文件加到jdk所在目录的bin文件夹下。
5.工具类如下

import java.io.File;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
 * @author gaoxp
 * @date 2019年3月13日下午4:08:13
 * @description 将word转换为pdf工具类
 */
public class Word2PDFUtil {
    //pdf 格式
    private static final int wdFormatPDF = 17;  
    
    public static void Word2PDF(String wordTempPath,String pdfTempPath) {
        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" , wordTempPath).toDispatch();  
            File tofile = new File(pdfTempPath);      
            if (tofile.exists()) {      
                tofile.delete();      
            }      
            Dispatch.call(doc,"SaveAs", pdfTempPath, wdFormatPDF);      
        } catch (Exception e) {      
            System.out.println(e.getMessage());      
        } finally {  
            Dispatch.call(doc,"Close",false);  
            if (app != null)      
                app.invoke("Quit", new Variant[] {});      
        }  
        //结束后关闭进程   
        ComThread.Release();
    }
}

6.使用示例

Word2PDFUtil.Word2PDF("D:/test.docx", "D:/test.pdf");

所需的Microsoft Save as PDF,jar包,两个dll文件下载地址如下。
链接: https://pan.baidu.com/s/1xQTSeVTHQxIW3yDb4l_5cw 提取码: 57jc

你可能感兴趣的:(一个将word转换为PDF的方法(复杂word格式不失真))