如何从ITextRenderer和Thymeleaf HTML模板生成的PDF文件中显示Unicode(十六进制)字符

时间:2018-10-11 10:57:08

标签: java itext thymeleaf itext7 flying-saucer

我正在使用代码从此网站的Thymeleaf HTML模板生成PDF文件[将Thymeleaf转换为PDF] [1]。

我得到的PDF非常好,但面临一个小问题。我正在用多种货币以PDF显示产品价格,并使用此参考网站[带Unicode(Hex)的货币符号] [1]获取不同货币的Unicode(Hex)值。

以下是我的.java文件代码

context.setVariable("currencySymbol","₹");  // this is Unicode for Indian rupee sysmbol

以下是我的百里香模板代码

<td th:utext="${currencySymbol} + ' ' +  ${#numbers.formatDecimal(product.price, 0, 'COMMA', 2, 'POINT')}"> </td> 

它工作正常并显示除印度卢比和阿拉伯联合酋长国迪拉姆以外的所有货币符号。

请建议我如何在生成的PDF中显示印度卢比和阿拉伯联合酋长国迪拉姆的货币符号。

谢谢。

**注意:-如果有任何新方法可以从HTML Thymeleaf模板生成PDF,请通知我**

1 个答案:

答案 0 :(得分:1)

问题是默认使用的字体不支持您要打印的字符。要使其正常工作,您可以嵌入可以显示该字符的另一种字体,例如DejaVu

您必须首先下载DejaVu字体文件,然后在Java类中声明此字体:

    ITextRenderer renderer = new ITextRenderer();
    renderer.getFontResolver().addFont("font/dejavu-sans/DEJAVUSANS.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

并在HTML文档中使用此字体,例如:

    td {font-family: DejaVu Sans;}