【发布时间】:2015-12-18 14:41:05
【问题描述】:
在 OSX 中,我想从终端打印到文件。
我有两个解决方案,但都有缺点。
1。使用“杯子过滤器”
cupsfilter -m application/vnd.cups-postscript \
-p /etc/cups/ppd/my_printer.ppd \
-o Duplex=DuplexNoTumble \
-o PageSize=A4 \
-o landscape my_document.pdf \
> my_document.ps
(.ppd 文件来自我的默认打印机)
我现在可以使用 raw 选项将此文件发送到打印机(避免使用任何 cupsfilters)
lp -o raw my_document.ps
但缺点是打印结果不正确,与我以正常方式打印到默认打印机时不一样。
lp -o Duplex=DuplexNoTumble -o PageSize=A4 -o landscape my_document.pdf
在一些调查中,我可以看到两种方法的一些 PJL 标头不同。
-@PJL SET BINDING = SHORTEDGE
+%@PJL SET BINDING = LONGEDGE
当使用选项 --list-filters 运行 cupsfilter 命令时
我明白了:
cgpdftops
pstops
似乎运行了两个过滤器。我认为这是错误的,但我不确定,也不知道如何更改。
2。创建文件后端
你可以这样做:
sudo lpadmin -p to_file \
-P /etc/cups/ppd/my_printer.ppd \
-E \
-v file:///tmp/my_document.ps \
-m raw
您可能会收到警告,必须取消注释 /private/etc/cups/cups-files.conf 中的以下行并将其设置为是
FileDevice Yes
然后重新启动杯子
sudo launchctl stop org.cups.cupsd
sudo launchctl start org.cups.cupsd
您现在可以使用以下命令打印到文件:
lp -d to_file \
-o Duplex=DuplexNoTumble \
-o PageSize=A4 \
-o landscape my_document.pdf
创建的 .ps 文件归 root 所有,因此要将其打印到默认打印机,我必须使用 sudo
sudo lp -o raw /tmp/my_document.ps
这个解决方案的问题是(除了文件权限的麻烦)我无法定义输出文件的名称。我不喜欢为每个打印作业重新创建 to_file 后端。
那么有没有其他解决方案可以为我提供与发送到打印机的数据完全相同的文件?
【问题讨论】: