如何在通过 thymeleaf 模板创建的 PDF 文件中显示印度卢比 ($) 字体

问题描述 投票:0回答:1

我正在从 thymeleaf 模板创建 html 并使用它来创建 PDF 文件。我正在使用 html2pdf 库将 html 转换为 pdf,并在 maven pom.xml 文件中使用以下依赖项。

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>html2pdf</artifactId>
    <version>2.1.6</version>
<dependency>

我在模板中使用了卢比符号 unicode 字符

&#x20b9;
。当我在浏览器上运行 html 时,会出现卢比符号,但它不会出现在生成的 PDF 文件中。

我正在使用java 17,Spring Boot框架。以下是我用来从 html 转换为 PDF 的代码。

import com.itextpdf.html2pdf.HtmlConverter;

private byte[] generatePdfFromHtml(String html) throws IOException {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    HtmlConverter.convertToPdf(html, byteArrayOutputStream);
    return byteArrayOutputStream.toByteArray();
}

使用卢比符号的 thmeleaf 代码。

<p>
    We are pleased to inform you that your loan for &#x20B9; <span th:text="${req.loanAmount}"></span> has been disbursed.
</p>

百里香内容在浏览器上显示是这样的

enter image description here

生成的PDF显示的内容是这样的,金额前没有卢比符号。

enter image description here

请建议一些方法,以便我可以使卢比符号出现在生成的 PDF 文件上。请帮忙。

java spring-boot thymeleaf itext7 html2pdf
1个回答
0
投票

很可能您的字体不支持卢比符号。尝试使用另一种字体,看看您是否仍然遇到该问题,例如:尝试使用 DejaVu Sans 等常见字体。

  1. 下载此字体,将其放置到资源中,在 Thymeleaf 模板中使用它。

  2. 生成 pdf 时使用此字体,例如

    public byte[] generatePdfFromHtml(String html) throws IOException {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    
    FontProvider fontProvider = new FontProvider();
    InputStream fontStream = getClass().getResourceAsStream("/fonts/DejaVuSans.ttf");
    fontProvider.addFont(PdfFontFactory.createFont(fontStream, true));
    
    HtmlConverter.convertToPdf(html, byteArrayOutputStream, new ConverterProperties().setFontProvider(fontProvider));
    
    return byteArrayOutputStream.toByteArray();
        }
    
© www.soinside.com 2019 - 2024. All rights reserved.