因为之前用的事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>

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


703

被折叠的 条评论
为什么被折叠?



