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.mfbz.cn/a/885673.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式-模板】

定义 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义了一个算法的骨架&#xff0c;并将一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法允许子类在不改变算法结构的情况下重新定义算法中的某些特定步骤。 UML图 组成角色 AbstractClass&#x…

工业交换机一键重启的好处

在当今高度自动化和智能化的工业环境中&#xff0c;工业交换机作为网络系统中至关重要的一环&#xff0c;其稳定性和可靠性直接影响到整个生产过程的顺利进行。为了更好地维护这些设备的健康运行&#xff0c;一键重启功能应运而生&#xff0c;并呈现出诸多显著的好处。 首先&am…

第十三届蓝桥杯真题Java c组C.纸张尺寸(持续更新)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;蓝桥杯关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 【问题描述】 在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm 841mm&#…

【STM32】 TCP/IP通信协议(1)--LwIP介绍

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

【Orange Pi 5嵌入式应用编程】-用户空间UART通信

用户空间UART通信 文章目录 用户空间UART通信1、理解UART通信1.1 什么是UART通信?1.2 UART如何工作?1.3 UART传输步骤1.4 UART的优缺点2、嵌入式Linux中的UART3、Orange Pi 5中UART完整示例3.1 UART操作函数定义3.2 UART定义函数实现1、理解UART通信 UART是Universal Asynch…

机器学习-KNN分类算法

1.1 KNN分类 KNN分类算法&#xff08;K-Nearest-Neighbors Classification&#xff09;&#xff0c;又叫K近邻算法。它是概念极其简单&#xff0c;而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想&#xff1a;如果一个样本在特征空间中的k个最…

YOLO11关键改进与网络结构图

目录 前言&#xff1a;一、YOLO11的优势二、YOLO11网络结构图三、C3k2作用分析四、总结 前言&#xff1a; 对于一个科研人来说&#xff0c;发表论文水平的高低和你所掌握的信息差有着极大的关系&#xff0c;所以趁着YOLO11刚刚发布&#xff0c;趁热了解&#xff0c;先人一步对…

如何从huggingface下载

我尝试了一下若干步骤&#xff0c;莫名奇妙就成功了 命令行代理 如果有使用魔法上网&#xff0c;可以使用命令行代码&#xff0c;解决所有命令行连不上外网的问题&#xff1a; #配置http git config --global http.proxy 127.0.0.1:xxxx git config --global https.proxy 127…

Linux递归找出目录下最近被修改文件(最近一段时间内被修改过的最新文件)(最近修改文件、最新文件、查找文件)(监控目录、监控mysql文件)

文章目录 命令1&#xff1a;找出目录下最近60分钟内修改的最新文件命令解析&#xff1a; 命令2&#xff1a;找出目录下最近60分钟内修改的最新n个文件 命令1&#xff1a;找出目录下最近60分钟内修改的最新文件 find /ky_data/mysql -type f -mmin -60 -exec ls -ltr {} | tai…

Linux驱动开发(速记版)--平台总线

第四十七章 平台总线模型介绍 47.1 什么是平台总线&#xff1f; 平台总线是Linux内核中的一种虚拟机制&#xff0c;用于连接和匹配平台设备与对应的平台驱动。它简化了设备与驱动之间的绑定过程&#xff0c;提高了系统对硬件的适配性和扩展性。 当设备或驱动被注册时&#xff…

完整网络模型训练(一)

文章目录 一、网络模型的搭建二、网络模型正确性检验三、创建网络函数 一、网络模型的搭建 以CIFAR10数据集作为训练例子 准备数据集&#xff1a; #因为CIFAR10是属于PRL的数据集&#xff0c;所以需要转化成tensor数据集 train_data torchvision.datasets.CIFAR10(root&quo…

YOLO11震撼发布!

非常高兴地向大家介绍 Ultralytics YOLO系列的新模型&#xff1a; YOLO11&#xff01; YOLO11 在以往 YOLO 模型基础上带来了一系列强大的功能和优化&#xff0c;使其速度更快、更准确、用途更广泛。主要改进包括 增强了特征提取功能&#xff0c;从而可以更精确地捕捉细节以更…

[云]Kubernetes 的基础知识

目标&#xff1a; 实践实验室涵盖 Kubernetes 的基础知识&#xff08;这个句子的意思是在实验室中通过实践学习 Kubernetes 的基本概念&#xff09; 在此过程中理解 Kubernetes 概念&#xff08;这个句子的意思是在学习的过程中理解 Kubernetes 的相关概念&#xff09; 议程&…

【无人机设计与技术】四旋翼无人机的建模

摘要 本项目的目标是通过 Simulink 建模和仿真&#xff0c;研究四旋翼无人机的建模、姿态控制、定点位置控制及航点规划功能。无人机建模包含了动力单元模型、控制效率模型和刚体模型&#xff0c;并运用这些模型实现了姿态控制和位置控制。姿态控制为无人机的平稳飞行提供基础…

OpenCV normalize() 函数详解及用法示例

OpenCV的normalize函数用于对数组&#xff08;图像&#xff09;进行归一化处理&#xff0c;即将数组中的元素缩放到一个指定的范围或具有一个特定的标准&#xff08;如均值和标准差&#xff09;。它有两个原型函数, 如下: Normalize()规范化数组的范数或值范围。当normTypeNORM…

制造企业为何需要PLM系统?PLM系统解决方案对制造业重要性分析

制造企业为何需要PLM系统&#xff1f;PLM系统解决方案对制造业重要性分析 新华社9月23日消息&#xff0c;据全国组织机构统一社会信用代码数据服务中心统计&#xff0c;我国制造业企业总量突破600万家。数据显示&#xff0c;2024年1至8月&#xff0c;我国制造业企业数量呈现稳…

简单线性回归分析-基于R语言

本题中&#xff0c;在不含截距的简单线性回归中&#xff0c;用零假设对统计量进行假设检验。首先&#xff0c;我们使用下面方法生成预测变量x和响应变量y。 set.seed(1) x <- rnorm(100) y <- 2*xrnorm(100) &#xff08;a&#xff09;不含截距的线性回归模型构建。 &…

计算机视觉综述

大家好&#xff0c;今天&#xff0c;我们将一起探讨计算机视觉的基本概念、发展历程、关键技术以及未来趋势。计算机视觉是人工智能的一个重要分支&#xff0c;旨在使计算机能够“看”懂图像和视频&#xff0c;从而完成各种复杂的任务。无论你是对这个领域感兴趣的新手&#xf…

Linux操作系统中MongoDB

1、什么是MongoDB 1、非关系型数据库 NoSQL&#xff0c;泛指非关系型的数据库。随着互联网web2.0网站的兴起&#xff0c;传统的关系数据库在处理web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心&#xff0c;出现了很多难以克服的问…

SpringBoot整合JPA详解

SpringBoot版本是2.0以上(2.6.13) JDK是1.8 一、依赖 <dependencies><!-- jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><!--…