当前位置: 首页 > article >正文

IText导出pdf不显示泰文

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




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

	//生成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()原代码:

    /**
     * 解决中文字体问题
     * @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()修改后的代码:

    /**
     * 解决中文字体问题
     * @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包版本:

	<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>

http://www.kler.cn/news/326702.html

相关文章:

  • 438. 找到字符串中所有字母异位词
  • uniapp 知识点
  • 【前端样式】Sweetalert2简单用法
  • 如何使用ssm实现个人日常事务管理系统+vue
  • 金融教育宣传月 | 平安养老险百色中心支公司开展金融知识“消保县域行”宣传活动
  • 心理咨询预约管理系统(含源码+sql+视频导入教程)
  • web前端与koa框架node后端实现分片断点上传
  • xtu oj 六边形
  • 制造企业如何提升项目管理效率?惠科股份选择奥博思PowerProject项目管理系统
  • Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world!
  • 【BurpSuite】访问控制漏洞和权限提升 | Access control vulnerabilities (3-6)
  • 一个静态ip可以提取出来多少ip
  • 新版pycharm如何导入自定义环境
  • elasticsearch_exporter启动报错 failed to fetch and decode node stats
  • C语言_回调函数和qsort
  • 全局安装cnpm并设置其使用淘宝镜像的仓库地址(地址最新版)
  • [leetcode] 71. 简化路径
  • 平安养老险肇庆中心支公司开展“2024年金融教育宣传月”活动
  • 【设计模式-模板】
  • k8s StorageClass 存储类
  • 中信银行西安分行开展“担当新使命 消保县域行”金融教育宣传活动
  • 总结之Coze 是一站式 AI Bot 开发平台——工作流使用及coze总结(三)
  • vivado中除法器ip核的使用
  • VS开发 - 静态编译和动态编译的基础实践与混用
  • golang学习笔记23-面向对象(五):多态与断言【重要】
  • C++学习9.24
  • git本地分支落后于远程分支,因此推送被拒绝怎么办?
  • nodejs逐字读取文件示例
  • Python中的`super()`函数:掌握面向对象编程的艺术
  • PHP“===”的意义