<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId>
<version>2.0.2</version>
</dependency>
// 加载模板
String inputFilePath = "D:\\ruoyi\\uploadPath\\download\\C20240613170548.docx";
String outputFilePath = "D:\\ruoyi\\uploadPath\\download\\C20240613170548.pdf"; // 指定您想要保存 PDF 的路径
try (XWPFDocument document = new XWPFDocument(new FileInputStream(inputFilePath))) {
PdfOptions options = PdfOptions.create();
// 使用 FileOutputStream 来写入到文件
try (FileOutputStream out = new FileOutputStream(outputFilePath)) {
PdfConverter.getInstance().convert(document, out, options);
System.out.println("PDF file has been created successfully at: " + outputFilePath);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("Failed to convert Word to PDF.");
}
总结:
1. 网上说用pdfbox,但是实际上
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
没有这两个包
2. 期间遇到找不到类的错误,实际上是第一张图的两个依赖有版本冲突;需要把xdocreport升级到2.0.2或者把poi降级到3.17或3.10
3. 这个写法并不能还原word中的格式
建议使用
<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文档
private static void replaceWordToPdf(String wordPath, String pdfPath){
File inputWord = new File(wordPath);
File outputFile = new File(pdfPath);
try {
InputStream docxInputStream = new FileInputStream(inputWord);
OutputStream outputStream = new FileOutputStream(outputFile);
IConverter converter = LocalConverter.builder().build();
converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}