gpt4 book ai didi

java - 在从 Java 项目生成的 pdf 文件上正确显示孟加拉字体

转载 作者:行者123 更新时间:2023-12-01 14:26:14 27 4
gpt4 key购买 nike

我正在开发一个基于 Java、Spring、Hibernate、Thymeleaf、MySQL 的项目。对于这个项目,我不得不生成 PDF 报告 在多个部分。所以我开始使用 Flying Saucer 一切都很完美,直到我尝试 在 PDF 报告中包含孟加拉字体 .起初它什么也没显示。然后我加入了孟加拉字体,如“Kalpurush”、“SolaimanLipi”。现在显示 Bangla 字体但格式不正确 .赞 “মোটউপার্জন”已成为“মোটউপার্‌জন” .我有一些带有孟加拉字体的页面,它们按预期工作。在 PDF 中使用孟加拉字体时会出现问题。我怎么解决这个问题?
飞碟的替代品是什么,可用于生成带有孟加拉字体的 PDF 报告。
我的代码:
Controller

@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>

最佳答案

您是否尝试过隔离问题?我怀疑有两个潜在的原因:

  • 是 Thymeleaf 引擎的问题吗?
  • 您是否缺少 TTF 字体的 @import?

  • 为了消除原因,我尝试在不使用 Thymeleaf 模板的情况下创建一个独立的 HTML 文件,并且除了 Kalpurush.TTF 之外还使用了 Google Bangla 字体(Galada)。 Galada 可以使用 Google Fonts API 导入,而 Kalpursh.ttf 必须从本地文件下载和导入。
    它在 Chrome 和 Edge 中正确呈现。这是片段(它使用本地文件,所以我不确定它会如何在 SO 中呈现)。我还附上了它在浏览器中的显示方式的屏幕截图。您可以将 HTML 保存在本地并自行尝试。只需将 Kalpurush.TTF 的 @import 替换为引用您的本地目录路径。

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="UTF-8" />
    <style>
    @import url('https://fonts.googleapis.com/css2?family=Galada&display=swap');
    @import url('file://d:/Giri/temp/so/kalpurush.ttf');

    .bengaliFont {
    font-family: 'Galada', cursive;
    }
    .bengaliFont2 {
    font-family: 'Kalpurush';
    }
    </style>
    </head>

    <body>
    <p class="bengaliFont"><span>Galada font:&nbsp;</span>মোট উপার্জন</p>

    <p class="bengaliFont2"><span>Kalpurush font:&nbsp;</span>মোট উপার্জন</p>
    </body>
    </html>

    这是我的浏览器在本地呈现此 HTML 文件的屏幕截图。
    enter image description here
    这表明字体文件没有问题。
    您可能想要获取独立的 html 文件并通过 FlyingSaucer 运行它以生成 PDF 并查看它是否解决了问题,然后从那里开始。

    关于java - 在从 Java 项目生成的 pdf 文件上正确显示孟加拉字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63434255/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com