我正在研究一个基于Java、Spring、Hibernate、Thymeleaf、MySQL的项目。对于该项目,我必须在多个部分中生成 PDF 报告。所以我开始使用Flying Saucer并且一切正常,直到我尝试在 PDF 报告中包含 Bangla 字体。起初它什么也没显示。然后我加入了孟加拉语字体,如“Kalpurush”、“SolaimanLipi”。现在它显示Bangla 字体但格式不正确。比如“মোট উপার্জন”变成了“ম োট উপ ার্জন”;. 我有一些带有孟加拉字体的页面,它们按预期工作。在 PDF 中使用 Bangla 字体时会出现问题。我怎么解决这个问题?
飞碟的替代品有哪些,可用于生成带有孟加拉字体的 PDF 报告。
我的代码:
控制器
@GetMapping("/print_bangla_pdf")
private void printBanglaPdf(HttpServletResponse response) throws Throwable {
response.setContentType("application/octet-stream");
String headerKey = "Content-Disposition";
String headerValue = "attachment; filename=bangla_pdf_report.pdf";
response.setHeader(headerKey, headerValue);
Context context = new Context();
context.setVariable("banglaWord", "মোট উপার্জন");
String processHTML = templateEngine.process("pdf_reports/bangla_pdf_report", context);
ServletOutputStream outputStream = response.getOutputStream();
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver resolver = renderer.getFontResolver();
resolver.addFont("C:\\kalpurush.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.setDocumentFromString(processHTML);
renderer.layout();
renderer.createPDF(outputStream, false);
renderer.finishPDF();
outputStream.close();
}
Bangla_pdf_report.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<style>
.bengaliFont {
font-family: "Kalpurush";
}
</style>
</head>
<body>
<p class="bengaliFont" th:text="'মোট উপার্জন'"></p>
<p class="bengaliFont" th:text="${banglaWord}"></p>
</body>
</html>