iava 实现将office 文件转成pdf

做一个项目需要文件预览效果,于是将office 文件转成pdf 进行预览,但是在网上找了很多发现很多大神都是用openoffice实现的,本地还要安装,感觉有点麻烦,难道就没有第三发就jar支持么,于是乎找了很久很久终于找到了一片博客 地址点这里
里面介绍的也和详细
首先我们需要下载这个jar 和dll文件放入java 配置路径
下载jacob.zip ,地址:https://sourceforge.net/projects/jacob-project/
下载完成后解压如下图:
这里写图片描述
如果是64位的就将x64 放入到jdk 安装目录的bin 中如果是32位的就将x86放入到jdk 安装目录的bin
之后再项目的pom配置文件中引入当然不是maven 工程也可以倒入这个jar


<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.18-M2</version>
<scope>system</scope>
<systemPath>D:/jacob.jar</systemPath>
</dependency>

之后写一个util的类来处理转换

public class PDFUtil {
private static final Integer WORD_TO_PDF_OPERAND = 17;
private static final Integer PPT_TO_PDF_OPERAND = 32;
private static final Integer EXCEL_TO_PDF_OPERAND = 0;
public void doc2pdf(String srcFilePath, String pdfFilePath) {
ActiveXComponent app = null;
Dispatch doc = null;
try {
ComThread.InitSTA();
app = new ActiveXComponent(“Word.Application”);
app.setProperty(“Visible”, false);
Dispatch docs = app.getProperty(“Documents”).toDispatch();
Object[] obj = new Object[]{
srcFilePath,
new Variant(false),
new Variant(false),//是否只读
new Variant(false),
new Variant(“pwd”)
};
doc = Dispatch.invoke(docs, “Open”, Dispatch.Method, obj, new int[1]).toDispatch();
// Dispatch.put(doc, “Compatibility”, false); //兼容性检查,为特定值false不正确
Dispatch.put(doc, “RemovePersonalInformation”, false);
Dispatch.call(doc, “ExportAsFixedFormat”, pdfFilePath, WORD_TO_PDF_OPERAND); // word保存为pdf格式宏,值为17
}catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
if (doc != null) {
Dispatch.call(doc, “Close”, false);
}
if (app != null) {
app.invoke(“Quit”, 0);
}
ComThread.Release();
}
}

public void ppt2pdf(String srcFilePath, String pdfFilePath) throws Exception {
    ActiveXComponent app = null;
    Dispatch ppt = null;
    try {
        ComThread.InitSTA();
        app = new ActiveXComponent("PowerPoint.Application");
        Dispatch ppts = app.getProperty("Presentations").toDispatch();

        /*
         * call
         * param 4: ReadOnly
         * param 5: Untitled指定文件是否有标题
         * param 6: WithWindow指定文件是否可见
         * */
        ppt = Dispatch.call(ppts, "Open", srcFilePath, true,true, false).toDispatch();
        Dispatch.call(ppt, "SaveAs", pdfFilePath, PPT_TO_PDF_OPERAND); // ppSaveAsPDF为特定值32

    } catch (Exception e) {
        e.printStackTrace();
        throw e;
    } finally {
        if (ppt != null) {
            Dispatch.call(ppt, "Close");
        }
        if (app != null) {
            app.invoke("Quit");
        }
        ComThread.Release();
    }
}

public void excel2Pdf(String inFilePath, String outFilePath) throws Exception {
    ActiveXComponent ax = null;
    Dispatch excel = null;
    try {
        ComThread.InitSTA();
        ax = new ActiveXComponent("Excel.Application");
        ax.setProperty("Visible", new Variant(false));
        ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
        Dispatch excels = ax.getProperty("Workbooks").toDispatch();

        Object[] obj = new Object[]{
                inFilePath,
                new Variant(false),
                new Variant(false)
        };
        excel = Dispatch.invoke(excels, "Open", Dispatch.Method, obj, new int[9]).toDispatch();

        // 转换格式
        Object[] obj2 = new Object[]{
                new Variant(EXCEL_TO_PDF_OPERAND), // PDF格式=0
                outFilePath,
                new Variant(0)  //0=标准 (生成的PDF图片不会变模糊) ; 1=最小文件
        };
        Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method,obj2, new int[1]);

    } catch (Exception es) {
        es.printStackTrace();
        throw es;
    } finally {
        if (excel != null) {
            Dispatch.call(excel, "Close", new Variant(false));
        }
        if (ax != null) {
            ax.invoke("Quit", new Variant[] {});
            ax = null;
        }
        ComThread.Release();
    }

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值