我正在从 thymeleaf 模板创建 html 并使用它来创建 PDF 文件。我正在使用 html2pdf 库将 html 转换为 pdf,并在 maven pom.xml 文件中使用以下依赖项。
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>2.1.6</version>
<dependency>
我在模板中使用了卢比符号 unicode 字符
₹
。当我在浏览器上运行 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 ₹ <span th:text="${req.loanAmount}"></span> has been disbursed.
</p>
百里香内容在浏览器上显示是这样的
生成的PDF显示的内容是这样的,金额前没有卢比符号。
请建议一些方法,以便我可以使卢比符号出现在生成的 PDF 文件上。请帮忙。
很可能您的字体不支持卢比符号。尝试使用另一种字体,看看您是否仍然遇到该问题,例如:尝试使用 DejaVu Sans 等常见字体。
下载此字体,将其放置到资源中,在 Thymeleaf 模板中使用它。
生成 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();
}