CUPS 中现在已弃用打印机驱动程序、后端和 PPD,因此我正在寻找将 PDF 文件打印到磁盘的“新”方法。 Michael Sweet(CUPS 的发明者)认为
ippeveprinter
是前进的方向,但我很难理解它。
我使用
ippeveprinter -D /Users/Shared/Print/ "Qwe"
设置它,并收到回复“正在监听端口 8501”。
所以我发送一个文件:
lp -d Qwe /path/to/file
并且
ippeveprinter
过程会挥霍大量“成功”消息:
localhost POST /ipp/print
localhost Continue
localhost Get-Job-Attributes successful-ok
localhost OK
localhost POST /ipp/print
localhost Continue
localhost Get-Printer-Attributes successful-ok
localhost OK
localhost Client closed connection.
但在所选位置找不到任何文件。或者我能看到的任何其他地方。
有什么想法吗?这是在 macOS 上,但 CUPS 也涵盖其他操作系统。
对于 ippeveprinter,-D 指定输出目录。使用 -d 保存假脱机文件的副本,使用 -c 生成 Postscript。
我是这样测试的:
% ippeveprinter -k -D file:///Users/Shared/print -c /usr/libexec/cups/command/ippeveps "Qwe"
Listening on port 8501.
该文件保存为 Postscript (.prn),因此您需要将它们转换为您选择的格式。 Homebrew 有 ps2pdf,我测试过它可以正确地从 .prn 文件生成 .pdf 文件。
手册页说,当 URI 是目录时,
-D
选项将使用作业 ID 和名称创建输出文件。
使用
-d
(小写)和 -k
(如 James Risner 的答案)只需移动临时假脱机文件夹的位置。
要输出文件,似乎您必须使用
-c ippeveps
(尽管我的设置需要/usr/libexec/cups/command/ippeveps
的完整路径名)。
这会生成一个 PostScript 文件(尽管文件扩展名为
.prn
)。即使使用 -F application/pdf
选项也不会生成 PDF 文件。手册页再次指出它必须与指定 PPD 文件的 -P
选项一起使用。这也不起作用,除非我在 PPD 中添加一行指定要生成的 PDF:
*cupsFilter: "application/pdf 0 cgpdftopdf"
但是,这引用了 CUPS 过滤器,本练习的重点是避免使用过滤器和 PPD,因为它们已被弃用。
(PPD 文件是由 CUPS 生成的通用文件;您需要创建或指向您自己的文件。)
因此,以下命令现在有效:
ippeveprinter -D file:///Users/Shared/Print/ -c /usr/libexec/cups/command/ippeveps -F application/pdf -P /private/etc/cups/ppd/Direct_PDF.ppd Qwe
...但需要注意的是,当不再支持过滤器和 PPD 时,它不会有任何帮助。
我希望澄清这个答案中的一两个误解。
ippeveprinter -f application/pdf myprinter
。重要的是要认识到,当 CUPS 客户端与 myprinter 交互时,它有义务发送 PDF。有人找到了了解发送要打印文档的用户或主机的方法吗?
皮维尔