HTML-шаблон Springboot и Thymeleaf: китайские иероглифы исчезают после преобразования в PDF

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

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

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

Вот шаблон html:

HTML-шаблон Springboot и Thymeleaf: китайские иероглифы исчезают после преобразования в PDF

вот результат: HTML-шаблон Springboot и Thymeleaf: китайские иероглифы исчезают после преобразования в PDF

Мы устанавливаем кодировку 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;
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
627
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Я надеюсь, что это помогает

Другие вопросы по теме