使用cupsfilter转换HTML到PDF时的编码错误与自定义页面尺寸失效问题
这两个问题我之前帮朋友排查过,刚好有经验,给你整理下解决方案:
一、解决编码乱码问题
字符显示成“xâ€是典型的UTF-8编码被当作Latin-1(ISO-8859-1)解析的问题,你可以从这几个方向入手:
在cupsfilter命令中强制指定UTF-8编码
直接给cupsfilter加上字符集参数,确保它用UTF-8解析HTML文件:cupsfilter -o charset=utf-8 -o media=custom.216x1000mm /Users/coloradoman/Desktop/r8fXc3bY4iefJn2jGzRIp.html > /Users/coloradoman/Desktop/testing123.pdf确保HTML文件本身声明了正确编码
检查你的HTML头部是否有这个meta标签,如果没有就加上:<meta charset="UTF-8">这个标签能明确告诉cupsfilter文件的编码格式,避免识别错误。
临时设置系统locale为UTF-8
有时候系统默认编码不是UTF-8也会搞乱输出,你可以在命令前临时指定locale:LC_ALL=en_US.UTF-8 cupsfilter -o media=custom.216x1000mm /Users/coloradoman/Desktop/r8fXc3bY4iefJn2jGzRIp.html > /Users/coloradoman/Desktop/testing123.pdf
二、解决自定义页面尺寸无效问题
cupsfilter对自定义尺寸的要求有点严格,格式不对或者没预先注册都可能失效,试试这些方法:
修正media参数的格式
CUPS里自定义尺寸的正确格式是customWIDTHxHEIGHTUNIT(注意没有中间的点号),你之前的命令里多了个点,改成这样试试:cupsfilter -o media=custom216x1000mm /Users/coloradoman/Desktop/r8fXc3bY4iefJn2jGzRIp.html > /Users/coloradoman/Desktop/testing123.pdf先在CUPS系统中注册自定义尺寸
如果直接改参数还是不行,可能需要先把这个尺寸添加到CUPS的可用介质列表里。首先用lpstat -p查看你的默认打印机名称,然后运行:lpadmin -p <你的打印机名称> -o CustomMediaSize=Custom.216x1000mm注册完成后,再用cupsfilter命令时指定这个尺寸:
cupsfilter -o media=Custom.216x1000mm /Users/coloradoman/Desktop/r8fXc3bY4iefJn2jGzRIp.html > /Users/coloradoman/Desktop/testing123.pdf检查CUPS配置是否允许自定义介质
打开/etc/cups/cupsd.conf文件,确保里面有这行配置(没有的话就添加):AllowUserCustomMedia Yes然后重启CUPS服务:
# Linux系统 sudo systemctl restart cups # macOS系统 sudo launchctl stop org.cups.cupsd sudo launchctl start org.cups.cupsd
内容的提问来源于stack exchange,提问作者Daniel Glassford
相关产品推荐
相关产品推荐

