解决 linux(centos7)word转换pdf时,pdf乱码问题
本文解决当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乱码问题相关推荐
- mac字体或windows字体安装到linux,解决linux服务器word文档生成pdf文档出现乱码
安装原因:在进行程序开发时,有时会遇到某些场景会需要此操作.比如服务器端生成word文档转pdf文档,因为linux没有某些字体导致生成端pdf出现乱码. 安装步骤 服务器目录 /usr/share/ ...
- Java实现windows,linux服务器word,excel转为PDF;aspose-words,Documents4j
Java实现windows,linux服务器word,excel转为PDF:aspose-words,Documents4j 一.通过aspose-words将word,Excel文档转为PDF 1. ...
- 【Python服务生活系列--2】实现WPS Office付费功能 word转换纯图pdf
前言 大家好,今天来填上一次埋下的坑~~本期为大家讲解如何通过Python实现wps office当中的付费功能,word转换纯图pdf. 我的思路 前言 1:将word文件转换为普通pdf文件 2: ...
- linux unzip乱码,Linux 中unzip解压时中文乱码的解决办法
Linux 中unzip解压时中文乱码的解决办法 Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如"资料.zip"时,如果直接使 ...
- 彻底解决Python3写爬虫或网站时的乱码问题
彻底解决Python3写爬虫或网站时的乱码问题 参考文章: (1)彻底解决Python3写爬虫或网站时的乱码问题 (2)https://www.cnblogs.com/pozhu15/p/113063 ...
- linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题
解决linux下java程序(例如applet)中文乱码问题 平台:Mandriva 2006.0 将Windows下的字体文件simsun.ttc拷贝到/usr/share/fonts/zh_CN, ...
- Linux系统Word转换PDF,文档字体乱码不显示问题解决。
1.问题 在Windows系统中,使用Java将Word文档转换为PDF格式时,结果文档内容正常:但是在Linux系统中,转出来PDF文档出现乱码或###符号等. 2.问题原因 这个问题是由于Linu ...
- linux中安装openoffice,及解决转pdf时中文乱码或者中文不显示问题【离线】
linux中安装openoffice[离线] 目录安装openoffice启动openoffice查看openoffice运行状态启动时可能出现的问题openoffice在转pdf时,中文乱码或者中文 ...
- WORD另存为PDF时出现乱码的解决方案
问题描述:在服务器上用WORD2007打开文档,另存为PDF,PDF中的部分内容会出现乱码:而在本地电脑上进行同样的操作却不会出现乱码. 原因:这是由于服务器上的OFFICE2007没有安装SP3补丁 ...
- bootstrap使用tableExport导出pdf时中文乱码问题
前言 最近拿到了一个任务,让处理一下公司的系统平台问题.问题就是页面导出PDF文件,有中文的话显示的都是乱码.因为公司的项目都是给国外客户使用的,所以我估计从设计到测试都没有考虑中文的问题.但是为啥现 ...
最新文章
- 【转载】C# 获取系统时间及时间格式
- 计算机辅助药物合成投什么期刊,中国药物化学杂志审稿快吗
- 【Paper】2009_Controllability of Multi-Agent Systems from a Graph-Theoretic Perspective
- vue-element-admin 1.4问题及解决方案
- excel不能插入activex控件_办公小技巧:制作更炫酷的Excel下拉菜单
- 从黄昏到夜暮 2021-04-15
- 科学计算机怎么算坐标,用科学计算器fx-5800算坐标怎么按
- 小程序制作五星点评(默认五星)
- VC6.0 +WDK 开发驱动的环境配置
- struts配置通配符*来匹配方法,实现动态调用
- ssas ssrs_如何使用SSAS表格模型数据库创建简单的SSRS报告
- mysql 触发器详情
- matlab LSB算法的三种改进
- 优锘科技:ThingStudio森工厂掀起数字孪生龙卷风暴
- apple music导入本地歌曲及歌词
- linux移植1.3寸oled屏幕,芯片SH1106
- cocos2d-x的初步学习二十八之爱消除一
- html流程svg动画,12款基于SVG的HTML5应用和动画
- 孢子社群:今日推荐ARVR微信群:云贵川渝ARVR行业精英交流群 孢子91
- 【vue d3 v4】vue2结合d3实现类似企查查的股权穿透图、股权结构图