本文解决当word转换为pdf时,pdf文档中的中文字体全部都是乱码(方框)的问题。

先简单的写一下word转换pdf的代码,这个网上有很多(最下方有引用一遍博客详细的讲解了如何转换)

 /**** @author jokerdragon* @Description word转换为pdf* @date 2022/9/9 2:48 PM* @param wordPath docx文档的路径* @param pdfPath  pdf文档的路径* @return java.io.File*       **/public static File word2Pdf(String wordPath,String pdfPath) throws Exception {// 许可证,没有这个转换出来的文档最上方会有红色的水印// 觉得这样写不够优雅的同学可以写成xml文件放在resources目录下,在代码中获取String licenseStr = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry>" +"<SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";ByteArrayInputStream is = null;is = new ByteArrayInputStream(licenseStr.getBytes());License license = new License();license.setLicense(is);// 创建临时文件,可以获取路径就行File tempFile = File.createTempFile("net_url", pdfPath);try(FileOutputStream fileOutputStream = new FileOutputStream(tempFile)){}Document document = new Document(wordPath);document.save(fileOutputStream, SaveFormat.PDF);} catch (Exception e) {e.printStackTrace();}return tempFile;}

以上就是word转换为pdf的核心代码,要做一些处理可以在前后加上,比如调用这个方法之前,我是获取到字符串转换为word文档的,然后再转换为pdf。转换为pdf之后,上传到阿里云保存,返回阿里云链接给前端同学下载的。这里就不细讲了,敲黑板了,接下来要说重点了!!!!

这个问题困扰了好几天,在我自己的windows电脑上成功转换出来,mac和linux转换不出来。
在mac字体库中添加中文字体后,也可以成功展示出来。话不多说,开整。

首先备注,我们使用的centos7 和 docker部署项目的,使用的阿里云的服务器。

1. 首先将centos7系统的编码格式改为支持中文的编码格式

将编码格式从LANG=en_US.UTF-8改为LANG=zh_CN.UTF-8

打开服务器输入

cat /etc/locale.conf

可以查看自己的编码格式,我这里已经进行了更改,使用vim命令更改文本。(这个就不用多说了吧,不会有人不知道怎么用Vim吧,不会吧,不会吧)

2.使编码格式生效

修改了编码格式之后,需要使编码格式生效,输入一下命令就行

source /etc/locale.conf

建议走以下步骤之前,备份阿里云磁盘镜像,不会可能会有suprise

3.安装字体服务的相关的依赖安装包

使用yum命令安装fontconfig和mkfontscale

yum install -y mkfontscale
yum install -y fontconfig

如果你们不允许连接外网或者yum命令不好使,那么恭喜你,寄了,砍掉转换pdf的需求吧,哈哈哈!!!
开个玩笑,还是有其他解决方案的,我就是yum命令不好使,键入命令时一直报错,所以只能采用备选方案,离线安装包的方法。

在可以连接网络和yum命令好使的服务器上下载安装包,命令如下

#安装获取依赖包的命令
yum -y install yum-utils
#新建一个文件来存放依赖包
mkdir -p /usr/share/font_rpm
#执行获取相关依赖命令
yumdownloader --resolve --destdir=/usr/share/font_rpm mkfontscale fontconfig

下载完成后,注意啦注意啦,有坑了。(我的坑,如果你觉得自己是欧皇,不会踩,那就往下走吧,服务器down掉,可别哭爹喊娘咯)

上图红框中的三个安装包一定删除
我查了一下,这三个包是与网络链接相关,我在第一次操作过程中,退出服务器之后就再也链接不上服务器,强制覆盖了宿主机网络连接相关的镜像。这个时候就只能回滚磁盘了。
在这里实名感谢一下我们后端的大哥,孙火箭。帮我回滚了磁盘镜像,不然我就可以直接寄了
大哥为什么叫这么奇怪的名字。enmmmm,可能大哥爱吃喜之郎果冻吧

如果没有机器或着yum命令不好使的,可以评论或着私信我,我可以给你发一下。
(为什么不像别人一样贴一个百度云盘链接? 因为我不会整,哈哈哈)

4.使用rpm命令解压安装压缩包

#执行安装命令
rpm -ivh ./*.rpm --nodeps --force #我的是当前目录,所以是./

安装包中有字体,名叫dejavu(翻译是 逮虾户 吗?)
但是不是中文的字体
成功解压之后,会在 /usr/share 目录下生成fontconfig和fonts,没有fonts目录的,自己用mkdir命令创建一个,问题不大。

5.安装中文字体

从windows电脑上copy字体就行,只copy宋体就好了,叫 simsun.ttc
什么,你问我没有windows电脑怎么办?
那只能买一台了啊,兄弟。
开个玩笑,同样可以私信我,我可以发给你。

6.执行以下命令,刷新字体缓存

是在 /usr/share/fonts 目录下执行,别迷路了啊

mkfontdir
mkfontscale
fc-cache -fv

可以执行以下命令查看字体

fc-list #查看所有字体
fc-list :lang=zh #查看中文字体

完结,撒花!!!

docker容器说: ???? 你在赣神魔?我呢,我呢,我可是docker容器啊,是与宿主机隔离的。

不好意思,伙计,忘记你了。如上说,docker容器相当与一个单独的小系统,是与外界隔离的,虽然可以挂载到宿主机的磁盘下,但是企业级开发最好不要用。所以也需要在docker容器中配置相关编码格式和中文字体。
这里感谢我们另外一位后端大哥,姜航天,在俺快要放弃的时候,一语惊醒梦中人。
为什么这位大哥的名字也这么奇怪,enmmm,可能这位大哥也爱吃喜之郎果冻吧
他做了一个导出excel的需求,也出现类似编码错误的问题,然后就跟我讲了是不是内部也要配置编码格式和字体。

7.容器中添加中文编码格式和中文字体

我们使用的dockerfile文件来整docker容器相关的配置
所以在dockerfile文件中添加相关配置(应该也可以在容器内操作,具体操作可以自行网络搜索)

ENV LANG zh_CN.UTF-8 #环境设置为中文编码环境
RUN apk add fontconfig && apk add --update ttf-dejavu && fc-cache -fv --force

提交代码,在构建的框架中(比如jenkins)构建这个容器的服务。
构建好容器之后执行以下命令,将中文字体copy到容器中,这应该也可以写入到dockerfile文件中,我还不太懂docker深层次的东西,只能用low方法,见谅。

docker cp /usr/share/fonts/simsum.ttc 容器名:/usr/share/fonts

使用以下命令进入容器

docker exec -it 容器名 /bin/bash

同样进入/usr/share/fonts 目录执行以下命令刷新字体缓存

mkfontdir
mkfontscale
fc-cache -fv

使用echo $LANG 命令查看容器内的编码环境
使用查看宿主机的字体的相同命令查看容器的字体以及中文字体

完结撒花!!!!这下真的撒花了,伦敦桥都塌了,这下真得撒花了。

作者注:
这里我也是看了很多博客,加上自己多天的实践而总结出来的,因为本人还是个菜鸟,如果有什么不对的地方,请各位大佬指证。也欢迎大家一起进行交流,蟹蟹。

参考博客:
centos7 :配置linux系统环境:
https://www.cnblogs.com/wuguofeng/p/15923241.html
https://www.anquanclub.cn/5821.html
word转换pdf:https://www.jianshu.com/p/86716c7122ef

解决 linux(centos7)word转换pdf时,pdf乱码问题相关推荐

  1. mac字体或windows字体安装到linux,解决linux服务器word文档生成pdf文档出现乱码

    安装原因:在进行程序开发时,有时会遇到某些场景会需要此操作.比如服务器端生成word文档转pdf文档,因为linux没有某些字体导致生成端pdf出现乱码. 安装步骤 服务器目录 /usr/share/ ...

  2. Java实现windows,linux服务器word,excel转为PDF;aspose-words,Documents4j

    Java实现windows,linux服务器word,excel转为PDF:aspose-words,Documents4j 一.通过aspose-words将word,Excel文档转为PDF 1. ...

  3. 【Python服务生活系列--2】实现WPS Office付费功能 word转换纯图pdf

    前言 大家好,今天来填上一次埋下的坑~~本期为大家讲解如何通过Python实现wps office当中的付费功能,word转换纯图pdf. 我的思路 前言 1:将word文件转换为普通pdf文件 2: ...

  4. linux unzip乱码,Linux 中unzip解压时中文乱码的解决办法

    Linux 中unzip解压时中文乱码的解决办法 Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如"资料.zip"时,如果直接使 ...

  5. 彻底解决Python3写爬虫或网站时的乱码问题

    彻底解决Python3写爬虫或网站时的乱码问题 参考文章: (1)彻底解决Python3写爬虫或网站时的乱码问题 (2)https://www.cnblogs.com/pozhu15/p/113063 ...

  6. linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题

    解决linux下java程序(例如applet)中文乱码问题 平台:Mandriva 2006.0 将Windows下的字体文件simsun.ttc拷贝到/usr/share/fonts/zh_CN, ...

  7. Linux系统Word转换PDF,文档字体乱码不显示问题解决。

    1.问题 在Windows系统中,使用Java将Word文档转换为PDF格式时,结果文档内容正常:但是在Linux系统中,转出来PDF文档出现乱码或###符号等. 2.问题原因 这个问题是由于Linu ...

  8. linux中安装openoffice,及解决转pdf时中文乱码或者中文不显示问题【离线】

    linux中安装openoffice[离线] 目录安装openoffice启动openoffice查看openoffice运行状态启动时可能出现的问题openoffice在转pdf时,中文乱码或者中文 ...

  9. WORD另存为PDF时出现乱码的解决方案

    问题描述:在服务器上用WORD2007打开文档,另存为PDF,PDF中的部分内容会出现乱码:而在本地电脑上进行同样的操作却不会出现乱码. 原因:这是由于服务器上的OFFICE2007没有安装SP3补丁 ...

  10. bootstrap使用tableExport导出pdf时中文乱码问题

    前言 最近拿到了一个任务,让处理一下公司的系统平台问题.问题就是页面导出PDF文件,有中文的话显示的都是乱码.因为公司的项目都是给国外客户使用的,所以我估计从设计到测试都没有考虑中文的问题.但是为啥现 ...

最新文章

  1. 【转载】C# 获取系统时间及时间格式
  2. 计算机辅助药物合成投什么期刊,中国药物化学杂志审稿快吗
  3. 【Paper】2009_Controllability of Multi-Agent Systems from a Graph-Theoretic Perspective
  4. vue-element-admin 1.4问题及解决方案
  5. excel不能插入activex控件_办公小技巧:制作更炫酷的Excel下拉菜单
  6. 从黄昏到夜暮 2021-04-15
  7. 科学计算机怎么算坐标,用科学计算器fx-5800算坐标怎么按
  8. 小程序制作五星点评(默认五星)
  9. VC6.0 +WDK 开发驱动的环境配置
  10. struts配置通配符*来匹配方法,实现动态调用
  11. ssas ssrs_如何使用SSAS表格模型数据库创建简单的SSRS报告
  12. mysql 触发器详情
  13. matlab LSB算法的三种改进
  14. 优锘科技:ThingStudio森工厂掀起数字孪生龙卷风暴
  15. apple music导入本地歌曲及歌词
  16. linux移植1.3寸oled屏幕,芯片SH1106
  17. cocos2d-x的初步学习二十八之爱消除一
  18. html流程svg动画,12款基于SVG的HTML5应用和动画
  19. 孢子社群:今日推荐ARVR微信群:云贵川渝ARVR行业精英交流群 孢子91
  20. 【vue d3 v4】vue2结合d3实现类似企查查的股权穿透图、股权结构图

热门文章

  1. Android下Device Tree简介
  2. 《MySQL高级篇》三、存储引擎
  3. 什么是SOLID原则(第1部分)
  4. iOS上的APP纷纷绕过苹果支付躲避30%抽成:“热更新”“马甲包”
  5. uboot编译中遇到的错误
  6. 3D塔防游戏实现 5.2 3D怪物死亡(Feekood语言)
  7. 2022最新软件测试面试题(含答案)
  8. CCleaner科学使用方法
  9. (JAVA编成练习):递归的使用,简单的列子帮你理解递归。
  10. 棉花异性纤维图像分割算法matlab程序,棉花异性纤维定位新方法