环境
CentOS Linux release 7.9.2009 (Core)
HP LaserJet Pro MFP m227fdw
hplip-3.21.6
CUPS 为 CentOS 7 系统自带:
cups-filters-1.0.35-28.el7.x86_64
cups-client-1.6.3-51.el7.x86_64
cups-filesystem-1.6.3-51.el7.noarch
cups-1.6.3-51.el7.x86_64
cups-libs-1.6.3-51.el7.x86_64
cups-filters-libs-1.0.35-28.el7.x86_64
ghostscript-cups-9.25-5.el7.x86_64
描述
使用 lp 打印含有中文的 txt 文件时,中文无法显示,或部分显示乱码。
解决
最终未采用使用其他方式生成 PDF,然后使用 CUPS lp 打印,可正常打印。
以下记录为尝试过的其他方案。
方案一
该方案仅适用于纯文本类型。paps 是纯文本到 PostScript 转换器。
# ContOS 7
yum install paps
# UBuntu
apt-get install paps
打印命令变更为:
cat 文件.txt | paps | lp -d 打印机名称
方案二
该方案能解决不能打印中文问题,但是会导致文本相互覆盖,尝试 cups-pdf 同样覆盖。
检查字体
CentOS 中,执行以下命令,检查是否有中文字体。若无输出,需进行安装字体。
fc-list :lang=zh
安装字体
将 Windows 中的字体(C:\Windows\Fonts\微软雅黑),复制到桌面。此处以微软雅黑常规为例:
C:\Windows\Fonts\msyh.ttc
Windows 中,运行 PowerShell,SCP 上传字体到 CentOS,以下以 root 用户为例:
scp .\msyh.ttc root@IP:/root
CentOS 7 中,依次执行如下命令安装字体:
cd
cp msyh.ttc /usr/share/fonts/
cd /usr/share/fonts/
mkfontscale # 若提示 mkfontscale: command not found,则 yum install mkfontscale
mkfontdir
fc-cache # 若提示 fc-cache: command not found,则 yum install fontconfig
最后再次检查字体,成功安装,则显示如下:
/usr/share/fonts/msyh.ttc: Microsoft YaHei:style=Normal
/usr/share/fonts/msyh.ttc: Microsoft YaHei UI:style=Normal
解决 CUPS 不能打印中文问题
vim /usr/share/cups/charsets/pdf.utf-8
# 末尾追加
3000 9FFF ltor double /usr/share/fonts/msyh.ttc/0
重启 cups 服务:
systemctl restart cups
参考
forum.ubuntu.org.cn/viewtopic.php?t=465073
www.jianshu.com/p/a6266d7d3059
blog.csdn.net/liuwenbiao1203/article/details/100096031
github.com/OpenPrinting/cups-filters/issues/135