惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Jina AI
Jina AI
The Cloudflare Blog
V
Visual Studio Blog
博客园_首页
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
博客园 - Franky

博客园 - digdeep

javax.imageio.IIOException: Invalid icc profile: duplicate sequence numbers Tomcat配置支持软连接 记一例DNS解析导致的系统卡顿问题 nginx配置透传自定义文件头 访问RustFS中的图片时,浏览器报错 (failed)net::ERR_BLOCKED_BY_ORB mysql主从复制报错:Last_Errno: 1872 Last_Error: Slave failed to initialize relay log info structure from the repository 华为云平台的操作系统因为OOM而重启的解决方法 passwd 修改密码报错“passwd: 鉴定令牌操作错误” mysql主从复制报错:Last_SQL_Errno: 1114 Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s) mysql主从复制从库报错:Last_Errno: 1594 centos编译安装opencv mysql搭建主从复制时一直报错 Last_IO_Errno: 2026 kswapd0进程占用cpu非常高 ./configure: error: SSL modules require the OpenSSL library. maven mvn install 报错: unable to find valid certification path to requested target 错误 升级Nginx,--with-openssl踩坑记录 Name or service not known Kernel panic - not syncing: Out of memory: system-wide panic_on_oom is enabled ERROR 2059 (HY000): Plugin caching_sha2_password could not be loaded gh-ost 报错 ERROR 1236 (HY000): A slave with the same server_uuid/server_id as this slave
解决Linux下生成PDF中文乱码的问题
digdeep · 2025-06-26 · via 博客园 - digdeep

新系统部署,PDF打印发现中文乱码。原因是服务器缺少中文字体库。实际上项目里面可以自带中文字体库,这样可以避免部署环境的不同而导致问题。增强兼容性。

参考:https://www.jianshu.com/p/bcede182647e

1.原因分析

这原因由于Linux是开源的,很多的字体没有被默认安装,在生成PDF的时候找不到对应字体找不到导致的。

1.查看系统预装字体

如果找不到 fc-list的命令,就执行下面的安装命令

cat /etc/issue # 查看Linux发行版本
Centos
yum install -y fontconfig mkfontscale 
Ubuntu
apt-get -y install fontconfig xfonts-utils
fc-list # 查看已有字体
fc-list :lang=zh # 查看中文字体

如果找到了中文字体,就需要查看PDF中的字体是否有被安装,没有被安装就需要安装相对应的字体。

2.安装字体

安装字体这玩意,可以只安装自己需要的字体,但是建议是将Win的所有字体全部安装好,这样一步到位,比较省心。

首先将Win的字体全部打包成Zip导入到需要被安装的Linux主机上。
Win字体存放路径 C:\Windows\Fonts

如果安装全部的字体就直接将这个文件夹Copy一份到其他的目录下然后直接将这个文件夹打包成压缩包。(这样比较靠谱)


image.png

然后将这个压缩包上传到服务器上的 /usr/share/fonts/目录下
我的是用Powershell上传的

scp  xxx/xxx/Fonts.zip root@192.168.1.122:/usr/share/fonts/

然后上到Linux机器上 执行如下命令

cd /usr/share/fonts/
unzip ./Fonts.zip
rm -rf ./Fonts.zip
rm -rf ./*.fon #这种字体是安装不上的
mkfontscale
mkfontdir
fc-cache

这个压缩包中的字体不会被全部安装的,有几个是安装不上的,但是不影响基本使用
应该是只能安装ttf和ttc的字体,我猜的


 

到这里字体就安装完毕了,再试试生成PDF应该就没有问题了。

3.运行在Docker中的程序如何解决这个问题

首先将源镜像下载下来
然后直接启动源镜像

docker run -it -d xxxx/dotnet/aspnet:3.1-buster-slim

然后将文件拷贝进去

cd .\Desktop\
docker cp .\Fonts.zip quizzical_darwin:/ # 这里要用容器名字
docker exec -it  quizzical_darwin /bin/bash # 进入容器中

再执行ubuntu的那些操作(使用本文上面的字体安装步骤,安装成功后退出)

然后再将这个有字体的镜像做成源镜像

docker commit -a "hulailai" -m ".net core for pdf-service" 20269bb55607 dotnet-font-base

如果需要上传到服务器就直接大哥标签然后上传到服务器

docker tag dotnet-font-base xxxx
docker push xxxx

搞定

再将这个源镜像作为你容器运行的 源镜像就OK了。