Шаблон Springboot & Thymeleaf HTML: китайские иероглифы исчезают после преобразования в PDF - PullRequest
0 голосов
/ 13 сентября 2018

Мы производим счета в формате PDF из шаблонов HTML.

Но когда HTML-текст написан на китайском языке, возникает проблема с результатом.

Специальные символы не отображаются, несмотря на настройки с UTF-8.

Здесьэто HTML шаблон:

enter image description here

вот результат: enter image description here

Устанавливаем 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;
}

1 Ответ

0 голосов
/ 17 сентября 2018

Я нашел решение, загрузив файл 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> 

Надеюсь, это поможет

...