documents4j 是一个 Java 库,可以将文档转换为另一种文档格式。
https://github.com/documents4j/documents4j
<parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.6.0</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.documents4j</groupId> <artifactId>documents4j-local</artifactId> <version>1.1.5</version> </dependency> <dependency> <groupId>com.documents4j</groupId> <artifactId>documents4j-transformer-msoffice-word</artifactId> <version>1.1.5</version> </dependency> </dependencies>
@RequestMapping("/to") @RestController public class PdfController { /** * doc文件转pdf * * @param path 文件路径 */ @RequestMapping("/doc2pdf") public ResponseEntity<byte[]> doc2pdfFileUpload(String path) throws IOException { URL url = new URL(path); URLConnection conn = url.openConnection(); InputStream inputStream = conn.getInputStream(); return doc2Pdf(inputStream, ".doc", "fileName.pdf"); } /** * docx、xlsx、转pdf * * @param fileType docx、doc、xls、xlsx * @param fileName pdf名称 */ public ResponseEntity<byte[]> doc2Pdf(InputStream docxInputStream, String fileType, String fileName) throws IOException { // 转换后的pdf临时路径 File outputFile = new File("C:/Users/admin002/Desktop/folder/doc/" + fileName); IConverter converter = LocalConverter.builder().build(); ResponseEntity<byte[]> fileResult = null; try (OutputStream outputStream = Files.newOutputStream(outputFile.toPath()); // 导出pdf文件给前端 FileInputStream inputStream = new FileInputStream(outputFile); ) { if (".docx".equals(fileType)) { converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute(); } else if (".doc".equals(fileType)) { converter.convert(docxInputStream).as(DocumentType.DOC).to(outputStream).as(DocumentType.PDF).execute(); } else if (".xls".equals(fileType)) { converter.convert(docxInputStream).as(DocumentType.XLS).to(outputStream).as(DocumentType.PDF).execute(); } else if (".xlsx".equals(fileType)) { converter.convert(docxInputStream).as(DocumentType.XLSX).to(outputStream).as(DocumentType.PDF).execute(); } byte[] bytes = new byte[(int) outputFile.length()]; inputStream.read(bytes); HttpHeaders headers = new HttpHeaders(); // 此处pdf名称需要传入 headers.set("Content-Disposition", "attachment; filename=\"" + fileName + "\""); fileResult = new ResponseEntity(bytes, headers, HttpStatus.OK); } finally { docxInputStream.close(); } return fileResult; } }
以上方式依赖于Windows上的MS Word、MS Excel,必须使用Windows。
只有在以下情况下才能运行 LocalConverter
构建:
- JVM在MS Windows平台上运行,该平台附带VBS的Microsoft脚本主机。
- MS Word 版本必须在2007 或更高版本。安装了 PDF 插件时,才支持 PDF 转换。该插件包含在了Word 2010及更高版本的MS Word中。
未完待续。。。。