Java word 转 pdf jacob方法

文章介绍了在Java中使用jacob库代替poi进行word到pdf转换,解决了poi转换后格式混乱和文本框不显示的问题。转换过程中需要注意dll文件的版本与操作系统位数匹配,并在JDK和JRE的bin目录下放置相应dll。此外,文章提供了jacob的jar包下载链接,并给出了添加到项目依赖的方法,以及处理服务器上jar打包时包含本地库的配置。

因为之前用的事poi 但是发现poi转完之后格式会乱,而且文本框都不显示,再问了一圈之后有个大佬说用jacod这个方法试试,用了一下发现果然一模一样的出来了,图在下面。

用这个方法jar包要自己下载,电脑要装有office。

jar包地址

链接:https://pan.baidu.com/s/1KuApppRIRfekgpbRMUACVQ 
提取码:fi7i 

大坑

这里有个大坑我要说一下就是,里面的jacob-1.18-x64.dll,jacob-1.18-x86.dll这两个东西你要根据你自己操作系统的位数来选择,64位就用第一个,32就用第二个,要把他们放在 JDK下bin的目录下,还要放在jre的bin目录下,然后C:\Windows\System32这个路径下也要放一个。

依赖

这个地方因为库里没有你只能现在本地里搞,你可以放在本地的仓库里,路径换一下就行,我为了和服务器一样所以反在这里。

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

代码

直接调里面word2pdf这个方法用就行,前提你的jar要放对位置

package com.admin.common.util.pdf;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import java.io.File;
import java.io.IOException;

/**
 * @author 小于转暴雨🌧
 * @date 2023/2/28 10:33
 */
public class JacodWordToPdf {
    static final int wdDoNotSaveChanges = 0;// 不保存待定的更改。
    static final int wdFormatPDF = 17;// word转PDF 格式

    public static void main(String[] args) throws IOException {
        String source1 = "E:\\git\\hosp_front\\public\\view\\20230228\\test1.docx";
        String target1 = "E:\\git\\hosp_front\\public\\view\\20230228\\test1.pdf";
        word2pdf(source1, target1);
    }




//source word 路径     target 转换pdf 后的pdf路径



    public static boolean word2pdf(String source, String target) {
        System.out.println("Word转PDF开始启动...");
        long start = System.currentTimeMillis();
        ActiveXComponent app = null;
        try {
            app = new ActiveXComponent("Word.Application");
            app.setProperty("Visible", false);
            Dispatch docs = app.getProperty("Documents").toDispatch();
            System.out.println("打开文档:" + source);
            Dispatch doc = Dispatch.call(docs, "Open", source, false, true).toDispatch();
            System.out.println("转换文档到PDF:" + target);
            File tofile = new File(target);
            if (tofile.exists()) {
                tofile.delete();
            }
            Dispatch.call(doc, "SaveAs", target, wdFormatPDF);
            Dispatch.call(doc, "Close", false);
            long end = System.currentTimeMillis();
            System.out.println("转换完成,用时:" + (end - start) + "ms");
            return true;
        } catch (Exception e) {
            System.out.println("Word转PDF出错:" + e.getMessage());
            return false;
        } finally {
            if (app != null) {
                app.invoke("Quit", wdDoNotSaveChanges);
            }
        }
    }


}

这个地方还有一个大坑就是,如果你要放在服务器上,你打jar,有可能这个jacob这个包在lib下没有,因为在本地中所以你要加个配置,如下图,这样你的这个本地的包也可以打在jar包中了。如果还有坑,或者别的问题私信我。

<includeSystemScope>true</includeSystemScope>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YHB0731

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值