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>
相关推荐
蓝桉80214 分钟前
图片爬取案例
开发语言·数据库·python
逸狼20 分钟前
【JavaEE进阶】Spring DI
java·开发语言
yonuyeung24 分钟前
代码随想录算法【Day54】
java·数据结构·算法
敲上瘾30 分钟前
基础dp——动态规划
java·数据结构·c++·python·算法·线性回归·动态规划
my_styles1 小时前
2025-alibaba-Sentinel组件
java·开发语言·sentinel
Dongwoo Jeong1 小时前
类型系统下的语言分类与类型系统基础
java·笔记·python·lisp·fortran·type
肖帆咪1 小时前
deepseek自动化代码生成
java·ai·自动化·ai编程·deepseek
刘小炮吖i1 小时前
Java 集合:单列集合和双列集合的深度剖析
java·集合
float_六七1 小时前
Java——单例类设计模式
java·单例模式·设计模式