java
复制代码
/**
* 生成pdf文档
* @param data
* @param file
* @throws IOException
*/
public static void generatePDF(JSONObject data, File file,String path) throws IOException {
// 创建 PDF 文档
PdfWriter writer = new PdfWriter(file);
PdfDocument pdfDoc = new PdfDocument(writer);
Document document = new Document(pdfDoc);
// 从 Redis 中加载字体
/*PdfFont simkaiFont = fontUtil.loadFontFromRedis(RedisKeyConstant.FONT + ":simkai");
PdfFont simsunFont = fontUtil.loadFontFromRedis(RedisKeyConstant.FONT + ":simsun");
PdfFont stzhongsFont = fontUtil.loadFontFromRedis(RedisKeyConstant.FONT + ":stzhongs");*/
// 自定义字体文件 path 文件父文件夹
PdfFont simkaiFont = PdfFontFactory.createFont(path + "simkai.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);
PdfFont simsunFont = PdfFontFactory.createFont(path + "simsun.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);
PdfFont stzhongsFont = PdfFontFactory.createFont(path + "stzhongs.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);
// 设置边距
document.setMargins(42.7f, 38f, 42.7f, 38f); // 上、右、下、左边距
// 添加法院名称
Paragraph courtLevel = new Paragraph(data.getString("court_level"))
.setFont(stzhongsFont) // 华文中宋
.setFontSize(22) // 二号字
.setFontColor(DeviceRgb.BLACK) // 黑色字体
.setMultipliedLeading(1.5f) // 1.5倍行距
.setMarginTop(10) // 段前间距
.setTextAlignment(TextAlignment.CENTER); // 居中对齐
document.add(courtLevel);
// 添加页眉页脚
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));
// 添加判决书类型
Paragraph caseType = new Paragraph(getCaseTypeText(data))
.setFont(stzhongsFont) // 华文中宋
.setFontSize(26) // 一号字
.setFontColor(DeviceRgb.BLACK) // 字体颜色为黑色
.setMultipliedLeading(1.5f) // 1.5倍行距
.setTextAlignment(TextAlignment.CENTER); // 居中对齐
document.add(caseType);
// 添加页眉页脚
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));
// 添加案号
Paragraph caseId = new Paragraph(data.getString("case_id"))
.setFont(simkaiFont) // 设置字体为楷体
.setFontSize(15) // 小三字号
.setFontColor(DeviceRgb.BLACK) // 字体颜色为黑色
.setFixedLeading(24) // 固定行距 24磅
.setMarginTop(12) // 段前一行(24磅,等于固定行距)
.setMarginBottom(24) // 段后一行(24磅,等于固定行距)
.setTextAlignment(TextAlignment.RIGHT); // 右对齐
document.add(caseId);
// 添加页眉页脚
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));
// 添加内容段落
List<String> contentList = JsonUtil.getList(data, "content", String.class);
float indent = 15 * 2;
for (String content : contentList) {
Paragraph contentPara = new Paragraph(content)
.setFont(simkaiFont) // 设置字体为楷体
.setFontSize(15) // 小三字号
.setFontColor(DeviceRgb.BLACK) // 设置字体颜色为黑色
.setFixedLeading(24) // 设置固定行距为24磅
.setFirstLineIndent(indent) // 设置首行缩进为2个字符
.setMultipliedLeading(1.5f) // 1.5倍行距
//.setWidth(300.51f) // 设置每行宽度
.setTextAlignment(TextAlignment.LEFT); // 左对齐
document.add(contentPara);
// 添加页眉页脚
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));
}
// 添加落款内容
List<String> signatureList = JsonUtil.getList(data, "signature", String.class);
for (String signature : signatureList) {
Paragraph signaturePara = new Paragraph(signature)
.setFont(simkaiFont) // 设置字体为楷体
.setFontSize(15) // 小三字号
.setFontColor(DeviceRgb.BLACK) // 设置字体颜色为黑色
.setFixedLeading(24)
.setTextAlignment(TextAlignment.RIGHT); // 右对齐
document.add(signaturePara);
// 添加页眉页脚
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));
}
// 添加页眉页脚
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new FooterEventHandler(data.getString("case_name"), simkaiFont, simsunFont));
// 关闭文档
document.close();
}