在OSX中,我想从终端打印到文件。
我有两个解决方案,但都有缺点。
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
选项将此文件发送到打印机(避免任何杯子过滤器)
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
似乎运行了两个过滤器。我认为这是错误的,但我不确定,我不知道如何改变它。
你可以这样做:
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
后端。
那么有没有其他解决方案可以为我提供一个文件,其中包含完全相同的数据,否则会被发送到打印机?
答案 0 :(得分:1)
看看这个答案:
它解释了如何设置我的 2dir 后端,它是您使用的 to_file 方法的扩展:
您的 to_file 打印机有一个固定的输出文件名 /tmp/my_document.ps ,每次创建新作业时都会被覆盖。
我的 2dir 后端为发送给它的每个作业使用相同的目录,但是它将作业ID,日期和时间放入每个新的作业文件名中,使其成为uniq。
这里描述的 2dir 从每个作业创建一个PDF。您可以轻松地在那里修改脚本以跳过创建PDF的最后一步,并保留将发送到打印机的任何文件类型。
答案 1 :(得分:0)
很久以前找到答案了,但是忘了回答我自己的问题
我目前分两个步骤进行操作,我创建了一个新的虚拟打印机Canon_IPC650_PS_to_file
,该打印机使用打印机中的.ppd文件,并设置了文件名(后记文件)。
之后,我可以打印到该新的虚拟打印机,并且将创建postscript文件,包括我想要的所有选项。
lpadmin -p Canon_IPC650_PS_to_file -E -v file:'/Some/Path/name-of-postscript-file.ps' -m 'Library/Printers/PPDs/Contents/Resources/Canon_IPC650.ppd'
lp -d Canon_IPC650_PS_to_file some-file.pdf -o media="A4" -o InputSlot="Tray3"