介绍
用于java项目中解决word转pdf的需求,转换的效果跟调用的工具类、字体库、源文件(是wps还是microsoft保存的,格式版本等)、系统环境等多个因素相关,没有百分百完成的方法,只有不断尝试,选择适合的方法。以下介绍三个能实现该功能的方法。
一、通过Aspose实现
说明:毕竟是需要付费买Licnse才能去水印的,还是比较好用的,我这边使用的版本是20.12。感兴趣的同学可以去aspose-words-20.12-jdk17.jar中查看License.class的源码了解验证逻辑。网上也有文章介绍这个逻辑,但大多数都是21年之前的说明了,22年后相同版本的License验证有变动。老版本(18.6版本,当前写文章的时间2022-6-26)的Licene的认证逻辑跟网上的差别不大,但是方法名称是有变动的,不要一味照搬其他文章内容,还是需要多看多思考。
项目实践过程中遇到问题:低于19.11的版本(本人测试过18.6版本的)在保存pdf后,会出现行高自动增加的问题。 用于实现的jar包20.12和18.6的地址:https://download.csdn.net/download/ka3p06/85789859
相关依赖
AsposeJavaAPI
Aspose Java API
https://repository.aspose.com/repo/
com.aspose
aspose-words
20.12
jdk17
核心代码
/**
* 通过aspose 将word转pdf
*
* @param sourcePath 源文件地址 如 /root/example.doc
* @param targetPath 目标文件地址 如 /root/example.pdf
*/
public static void asposeWordToPdf(String sourcePath, String targetPath) {
LoadOptions opts = new LoadOptions();
// opts.setMswVersion(MsWordVersion.WORD_2016);
opts.getLanguagePreferences().setDefaultEditingLanguage(EditingLanguage.CHINESE_PRC);
Document doc = null;
try {
doc = new Document(sourcePath, opts);
ParagraphFormat pf = doc.getStyles().getDefaultParagraphFormat();
pf.clearFormatting();
PdfSaveOptions options = new PdfSaveOptions();
// 文字和图像压缩
options.setExportDocumentStructure(true);
options.setTextCompression(PdfTextCompression.FLATE);
options.setImageCompression(PdfImageCompression.AUTO);
// 接收修订
doc.acceptAllRevisions();
// 去掉批注
NodeCollection nc = doc.getChildNodes(NodeType.COMMENT,true);
if (nc != null && nc.getCount() > 0) {
for(int i=0;i |