使用itextpdf
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.15</version>
<type>pom</type>
</dependency>
JAVA代码
在转换的过程中SimSun.ttf文件作用是将中文字体进行转换
package com.example.controller;
import com.example.model.LogisticsDTO;
import com.example.model.request.PdfTableRequest;
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
/**
* @author :cainiao
* @date : 2024/10/28
*/
@RestController
@RequestMapping("/common")
public class CommonRequest {
@GetMapping("/getPDFData")
public ResponseEntity<Resource> getPDFData() throws IOException {
String html = "";
// 输出 PDF 文件的路径
String dest = "output.pdf";
// 替换为您字体文件的路径
String fontPath = "SimSun.ttf";
// 读取 HTML 文件内容
html = new String(Files.readAllBytes(Paths.get("小说.html")), "UTF-8");
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdfDoc = new PdfDocument(writer);
// 创建 ConverterProperties
ConverterProperties properties = new ConverterProperties();
// 创建并设置 FontProvider
DefaultFontProvider fontProvider = new DefaultFontProvider();
fontProvider.addFont(fontPath );
properties.setFontProvider(fontProvider);
// 将 HTML 转换为 PDF
HtmlConverter.convertToPdf(html, pdfDoc, properties);
pdfDoc.close();
return exportPdf(dest);
}
public ResponseEntity<Resource> exportPdf( String pdfFilePath){
File pdfFile = new File(pdfFilePath);
// 检查文件是否存在
if (!pdfFile.exists()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
// 返回 PDF 文件作为响应
Resource resource = new FileSystemResource(pdfFile);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + pdfFile.getName());
return ResponseEntity.ok()
.headers(headers)
.contentLength(pdfFile.length())
.contentType(org.springframework.http.MediaType.APPLICATION_PDF)
.body(resource);
}
HTML模版
<html>
<head>
<meta charset="utf-8">
<title>小说</title>
</head>
<body>
<div style="text-align: center;">
<h4>小说清单</h4>
<div>
<table border="1" style="margin: auto" cellpadding="10">
<tbody>
<tr>
<th>小说名称</th>
<th>主角</th>
<th>作者</th>
<th>创建时间</th>
</tr>
<tr>
<td>白鹿原</td>
<td>白嘉轩、田小娥</td>
<td>陈忠实</td>
<td>1993年</td>
</tr>
</tbody>
<tr>
<td>平凡的世界</td>
<td>孙少安、孙少平</td>
<td>路遥</td>
<td>1986年</td>
</tr>
<tr>
<td>繁花</td>
<td>沪生、阿宝、小毛</td>
<td>金宇澄</td>
<td>2012年</td>
</tr>
</table>
</div>
</div>
<style>
</style>
</body>
</html>