1、导入依赖
核心依赖:
<!-- Apache POI --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.15</version> </dependency> <!-- PdfConverter --> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId> <version>1.0.6</version> </dependency>
完整 pom.xml 文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.riu</groupId> <artifactId>spring-boot-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-demo</name> <description>spring-boot-demo</description> <properties> <java.version>8</java.version> </properties> <dependencies> <!-- Web 启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Thymeleaf 启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- Apache POI --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.15</version> </dependency> <!-- PdfConverter --> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId> <version>1.0.6</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、用于上传文件的页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/w2p/convert" method="post" enctype="multipart/form-data">
<input type="file" name="file"><input type="submit" value="转换"/>
</form>
[[${result}]]
</body>
</html>3、控制层代码
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@Controller
@RequestMapping("/w2p")
public class FileConversionController {
/**
* 跳转 w2p 页面,提交文件
* @return
*/
@GetMapping
public String w2p(){
return "/w2p/w2p";
}
/**
* 文件转换:word 装换为 PDF
*
* @param file 源 word 文件
* @return
*/
@PostMapping("/convert")
public ResponseEntity<byte[]> convertWordToPdf(@RequestParam("file") MultipartFile file) {
try {
// 创建 word 临时文件对象
File wordFile = File.createTempFile("word", ".docx");
// 临时 word 文件写入磁盘
file.transferTo(wordFile);
// 建 pdf 临时文件对象
File pdfFile = File.createTempFile("pdf", ".pdf");
// 调用转换工具类
WordToPdfConverter converter = new WordToPdfConverter();
// 转换 PDF
converter.convertToPdf(wordFile, pdfFile);
/* PDF 文件下载 */
FileInputStream fis = new FileInputStream(pdfFile);
byte[] bytes = new byte[fis.available()];
fis.read(bytes);
// 删除 word 临时文件
wordFile.delete();
fis.close();
pdfFile.delete();
// 设置下载的响应头信息
HttpHeaders hh = new HttpHeaders();
hh.setContentDispositionFormData("attachement", pdfFile.getName());
return new ResponseEntity<byte[]>(bytes, hh, HttpStatus.OK);
/* PDF 文件下载 */
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}4、PDF 转换类
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.*;
public class WordToPdfConverter {
public void convertToPdf(File wordFile, File pdfFile) throws IOException {
InputStream inputStream = null;
OutputStream outputStream = null;
XWPFDocument document = null;
try {
// 文件输入流
inputStream = new FileInputStream(wordFile);
// 文件输出流
outputStream = new FileOutputStream(pdfFile);
document = new XWPFDocument(inputStream);
PdfConverter.getInstance().convert(document, outputStream, null);
} catch (IOException e){
e.printStackTrace();
} finally {
// 释放资源
document.close();
outputStream.close();
inputStream.close();
}
}
}

0条评论
点击登录参与评论