背景:由于前端vue无法实现复杂的word可视化插件,希望后端做个能将复杂word转为pdf的方案。(这里我最终使用的是documents4j)
java中word转为pdf
经过gpt、网上搜索、以及多方面的考量有以下几种方案。
- 1.poi原生的转换,其优点就是免费开源,缺点就是工作量会很大,并且对于复杂文档无法做到足够的格式满足。
- 2.Aspose.Words这一款商业三方插件,有点就是功能强大,缺点就是要钱。
- 3.documents4j这款免费也符合现阶段功能,并且免费
实现documents4j
1.安装wps
2.代码
maven依赖
xml
<!-- word转pdf start -->
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-local</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-transformer-msoffice-word</artifactId>
<version>1.0.3</version>
</dependency>
<!-- word转pdf end -->
java源码
java
public static void main(String[] args) {
String wordPath= "0004简历.docx";
String pdfPath = "output.pdf";
converterToPdf(wordPath,pdfPath);
}
public static void converterToPdf(String wordPath, String pdfPath) {
try {
InputStream inputStream = new FileInputStream(wordPath);
OutputStream outputStream = new FileOutputStream(pdfPath);
IConverter converter = LocalConverter.builder().build();
// 判断文档类型
if (wordPath.contains(".doc")) {
converter.convert(inputStream).as(DocumentType.DOC).to(outputStream).as(DocumentType.PDF).execute();
} else {
converter.convert(inputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
}
// 最后关闭流
outputStream.close();
inputStream.close();
converter.shutDown();
} catch (Exception e) {
e.printStackTrace();
}
}