项目需要使用java将后台生成的word文件转化为pdf,第一次做这个所以找了很多资料和代码,但一直都有问题。
有的可以转化但在第一页有水印:Evaluation Warning: The document was created with Spire.Doc for JAVA.
解决的方式就是给word添加一个空的首页,生成PDF后去除该pdf的首页即可,代码和jar包如下,需要的小伙伴们可以自行下载复制使用。
一、 jar包
1、spire.doc-2.2.0.jar,必须是这个版本,亲测可用
官网(不推荐):https://www.e-iceblue.cn/
下载jar包(推荐)
百度网盘链接:https://pan.baidu.com/s/1RTHDrIoKk2sPXegv-ZEZ8g
提取码:z7tw
下载完成后将该jar包导入到项目中
2、itextpdf包,版本要求不高,可按需要更改
使用maven引用:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
二、代码如下
package com.pdf.utils;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.spire.doc.*;
import org.apache.commons.lang3.StringUtils;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* word转pdf工具类
*/
public class WordToPdf {
/**
* word转pdf工具类
* @param path 需要转换的word文件地址
* @return String pdf版地址
*/
public static void wordToPdf(String path){
//首页带有红色水印的版本路径(可设为自己的路径)
String test = "D:\\test\\test.pdf";
//转化最终结果路径(可设为自己的路径)
String reason = "D:\\test\\reason.pdf";
try {
Document document = new Document();
document.loadFromFile(path);
//输出为PDF,此时pdf文件首页带有红色水印
document.saveToFile(test, FileFormat.PDF);
//删除pdf文件带水印信息的第一页,并重新输出为PDF
PdfReader reader = new PdfReader(test);
List<String> pages = new ArrayList<>();
for (int i = 2; i <= reader.getNumberOfPages(); i++) {
pages.add(String.valueOf(i));
}
reader.selectPages(StringUtils.join(pages, ","));
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(reason));
stamp.close();
reader.close();
} catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
//再次提示,该方法生成的pdf首页有红色水印,本代码会删除生成pdf的首页,所以可在word文件的首页添加一页空白页,防止生成pdf缺少首页数据
String path = "D:\\test\\测试.docx";
wordToPdf(path);
}
}
三、测试如下
以下是我的测试文件及结果文件在wps中打开的效果
1、word文件:测试.docx
2、test文件:test.pdf。首页有红色的水印
3、reason文件:reason.pdf。去除首页之后的结果文件