我们从html模板中生成pdf发票。
但是当html文本为中文时,结果会有问题。
尽管使用UTF-8进行了设置,但特殊字符不会显示。
这是html模板:
我们在模板解析器和html模板标头中设置UTF-8编码。
我们缺少什么?
html模板
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>风标汽车租赁服务收据</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
....
</html>
和模板解析器:
@Bean
public FileTemplateResolver fileTemplateResolver() throws URISyntaxException {
FileTemplateResolver fileTemplateResolver = new FileTemplateResolver();
fileTemplateResolver.setPrefix(getPath());
fileTemplateResolver.setTemplateMode("LEGACYHTML5");
fileTemplateResolver.setSuffix(".html");
fileTemplateResolver.setCharacterEncoding("UTF-8");
fileTemplateResolver.setOrder(1);
return fileTemplateResolver;
}
答案 0 :(得分:0)
我已经找到了解决方案,方法是下载simsun的ttc文件并将其添加到项目资源中。
然后将其添加到渲染器的字体中,如下所示:
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver resolver = renderer.getFontResolver();
final ClassPathResource fonts = new ClassPathResource("fonts/simsun.ttc");
resolver.addFont(fonts.getPath(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.setDocumentFromString(processedHtml);
renderer.layout();
renderer.createPDF(byteArrayOutputStream, false);
renderer.finishPDF();
还请确保从pom.xml中删除true过滤条件,否则Spring会破坏二进制ttc文件。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> -- remove this line
</resource>
</resources>
我希望对您有帮助