Мы создаем счета в формате PDF на основе шаблонов HTML.
Но когда текст html на китайском языке, возникает проблема с результатом.
Специальные символы не отображаются, несмотря на настройки UTF-8.
Вот шаблон html:
Мы устанавливаем кодировку UTF-8 в преобразователе шаблонов и в заголовке шаблона html.
Что нам не хватает?
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;
}
Я нашел решение, загрузив ttc-файл для simsun и добавив его в ресурсы проекта.
Затем я добавляю его к шрифтам средства визуализации, как показано ниже:
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();
Также убедитесь, что вы удалили фильтрацию true из pom.xml, иначе Spring повредит двоичный файл ttc.
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> -- remove this line
</resource>
</resources>
Я надеюсь, что это помогает