IText导出pdf不显示泰文

  使用IText导出PDF意外发现其他外文都能导出成功,只有泰文会消失,查了一下没有能用的办法,官网也没有我这种情况,最后还是误打误撞试出来的。还是要下载泰文字体,网上很多,我是从这里下载的:https://fontmeme.com/ziti/thai-fonts/

  导出pdf的方法,使用的是html当模版,重要的是getConverterProperties方法。

java 复制代码
	//生成PDF文件至文件服务器
    private BaseFileInfoResp uploadPdfToFileServer(PoInfo poInfo) {
        try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
            Map<String, Object> stringObjectMap = inParamChange(poInfo);
            stringObjectMap.putAll(PmsPdfFieldEnum.getMap());
            log.info("json: {}", JSONUtil.toJsonStr(stringObjectMap));
            Configuration freemarkerCfg = new Configuration(Configuration.VERSION_2_3_28);
            freemarkerCfg.setTemplateLoader(new ClassTemplateLoader(ExcelServiceImpl.class, "/template/"));
            Template template = freemarkerCfg.getTemplate("pdf.html");
            StringWriter out = new StringWriter();
            template.process(stringObjectMap, out);
            String html = out.toString();
            PdfDocument pdf = new PdfDocument(new PdfWriter(output));
            pdf.setDefaultPageSize(PageSize.A4);
            Document document = HtmlConverter.convertToDocument(html, pdf, getConverterProperties());
            document.getRenderer().close();
            document.close();
            MultipartFile multipartFile = MultipartFileUtils.buildFileClientFile(String.format("%s_%s.pdf", poInfo.getCode(), poInfo.getCurrentVersion()), output.toByteArray());
            // 文件上传fastDFS再返回文件地址
            return fileService.upload(multipartFile, userService.getCurrentUserDto().getUserAccount());
        } catch (Exception e) {
            log.info("生成pdf异常:", e);
            throw new BizException(I18nStaticEnum.static_text_112381.code);
        }
    }

getConverterProperties()原代码:

java 复制代码
    /**
     * 解决中文字体问题
     * @return
     * @throws Exception
     */
    private ConverterProperties getConverterProperties() throws Exception {
        ConverterProperties props = new ConverterProperties();
        FontProvider fontProvider = new FontProvider();
        PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
        fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H");
        fontProvider.addStandardPdfFonts();
        fontProvider.addFont("template/font/simsun.ttc");
        fontProvider.addFont("template/font/STHeitibd.ttf");
        props.setFontProvider(fontProvider);
        props.setCharset("utf-8");
        return props;
    }

getConverterProperties()修改后的代码:

java 复制代码
    /**
     * 解决中文字体问题
     * @return
     * @throws Exception
     */
    private ConverterProperties getConverterProperties() throws Exception {
        ConverterProperties props = new ConverterProperties();
        FontProvider fontProvider = new FontProvider();
        // 一定要注释这里,就是UniGB-UCS2-H这个编码格式和泰语编码格式不兼容
//        PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
//        fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H");
        fontProvider.addStandardPdfFonts();
        fontProvider.addFont("template/font/simsun.ttc");
        fontProvider.addFont("template/font/STHeitibd.ttf");
        fontProvider.addFont("template/font/STSONG.TTF"); //华文宋体
        fontProvider.addFont("template/font/NotoSansThai.ttf"); //泰语字体
        props.setFontProvider(fontProvider);
        props.setCharset("utf-8");
        return props;
    }

附上jar包版本:

xml 复制代码
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.RELEASE</version>
	</parent>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-dependencies</artifactId>
		<version>Finchley.RELEASE</version>
		<type>pom</type>
		<scope>import</scope>
	</dependency>
        <!--itext7 html转pdf用到的包-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.6</version>
        </dependency>
        <!--itext7 中文支持-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>font-asian</artifactId>
            <version>7.1.12</version>
        </dependency>
相关推荐
笑小枫3 分钟前
用 Claude Code 推翻重写笑小枫网站
java·人工智能·spring boot·ai编程
霸道流氓气质16 分钟前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
格林威23 分钟前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
独隅37 分钟前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea
小大宇1 小时前
Python 集成 Conda
开发语言·python·conda
还是奇怪1 小时前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
zfoo-framework1 小时前
1.ansible安装 2.虚拟机克隆
java
码上解惑1 小时前
从 Dify 工作流说起:常用节点怎么选、怎样组合?
java·人工智能·ai·agent·dify·智能体·spring ai
小大宇2 小时前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
Legendary_0082 小时前
LDR6500 设计指南:Type-C 音频快充二合一配件 PD 取电与插拔时序控制方案
c语言·开发语言·音视频