我正在使用 Spring Boot 创建并返回 PDF。当我的字符串内容包含表情符号和 Unicode 字符(如"This is d£escript????ion section????????????????????"
,然后在下载的 PDF 中它们将被跳过。有人可以帮我解决这个问题吗?
我的代码如下
ITextRenderer renderer = new ITextRenderer();
ResourceLoaderUserAgent callback = new ResourceLoaderUserAgent(renderer.getOutputDevice());
callback.setSharedContext(renderer.getSharedContext());
renderer.getSharedContext().setUserAgentCallback(callback);
renderer.setDocumentFromString(pdfContent(templateId, pdfData));
renderer.layout();
renderer.createPDF(outputStream);
}
pdfContent(TemplateId templateId, Map<String, Object> pdfData) throws TemplateException,
IOException {
return FreeMarkerTemplateUtils
.processTemplateIntoString(freemarkerMailConfiguration.getTemplate(templateId.getValue()), pdfData);
}
问题是您使用的字体不包含表情符号,因此它们无法在 PDF 中呈现。不幸的是,我找不到可以涵盖所有表情符号的字体。我能找到的最好的是 DejaVu,它涵盖了您示例中的一些表情符号。
要使用它,
- 您必须下载 DejaVu 字体(您可以在互联网上轻松找到它)。
- 将其包含在渲染过程中(确保匹配文件的确切路径):
ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("font/dejavu-sans/DejaVuSans.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
<html>
<head>
<meta charset="utf-8" />
<style>
body{font-family:"DejaVu Sans", sans-serif;}
</style>
</head>
<body>
<p>This is descript????ion section????????????????????.</p>
</body>
</html>
Here is the result in the PDF:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)