【问题标题】:How to print a PDF to a raw printer file with CUPS in terminal如何在终端中使用 CUPS 将 PDF 打印到原始打印机文件
【发布时间】: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 后端。

那么有没有其他解决方案可以为我提供与发送到打印机的数据完全相同的文件?

【问题讨论】:

    标签: macos printing cups


    【解决方案1】:

    看看这个答案:

    它解释了如何设置我的 2dir 后端,它是您使用的 to_file 方法的扩展:

    • 您的 to_file 打印机有一个固定的输出文件名,/tmp/my_document.ps,每次创建新作业时都会覆盖该文件名。 p>

    • 我的 2dir 后端对发送给它的每个作业使用相同的目录,但它会将作业 ID、日期和时间放入每个新作业文件名中以使其具有唯一性。

    那里描述的 2dir 从每个作业创建一个 PDF。您可以在那里轻松地修改脚本以跳过创建 PDF 的最后一步并保留将发送到打印机的任何文件类型。

    【讨论】:

      【解决方案2】:

      很久以前找到答案,但忘记回答我自己的问题

      我目前分两步执行此操作,我创建了一个新的虚拟打印机 Canon_IPC650_PS_to_file,它使用我打印机中的 .ppd 文件,并设置文件名(一个 postscript 文件)。

      之后,我可以打印到这个新的虚拟打印机,并且将创建 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" 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 2015-10-19
        • 2012-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多