【发布时间】:2020-12-05 14:38:28
【问题描述】:
我正在开发一个基于 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>
【问题讨论】:
-
能否请您在java中提供a Minimal, Reproducible Example?
-
这是一个最小的、可重现的例子。只需将此代码放在任何带有 FlyingSaucer 的 Spring 项目中,然后更改字体的文件位置,代码就会运行!
-
@Partho63 bhai,我面临的问题完全相同。你是怎么解决的,Bhai?还是有其他方法?
-
@MuhammadSaimon 我找不到任何解决此问题的方法。我最终使用了pdfmake JavaScript 库。
标签: java pdf-generation flying-saucer bangla-font