环境

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

最后修改:2021 年 09 月 07 日 09 : 57 AM
如果觉得文章帮助了您,您可以随意赞赏。