好的,这就是我想要做的。我想添加一个打印选项,将用户文档的任何内容打印到PDF,并在将其发送到设备之前添加一些标题。
我想我的问题是:如何为用户添加虚拟“打印机”驱动程序,该驱动程序将启动我正在开发的将生成PDF的应用程序(或制作PDF并启动我的应用程序,并引用新生成的PDF)?如何与CUPS连接以生成PDF?我不确定我是否清楚,所以如果有更多信息可以帮助我,请告诉我。
我已经完成了this printing with CUPS tutorial,似乎可以将所有设置都设置好,但文件似乎永远不会出现在相应的临时位置。如果有人正在寻找一个用户端PDF打印机,this cups-pdf-for-mac-os-x是一个通过安装程序工作的打印机,但是当我下载源代码并按照说明操作时,我在指定的目录中出现相同的问题。在自述文件中。如果有人可以通过终端让这些中的任何一个在Mac上工作,请逐步告诉我你是如何做到的。
答案 0 :(得分:11)
要走的路是:
使用您喜欢的任何驱动程序设置打印队列。但我建议使用PostScript驱动程序/ PPD。 (PostScript PPD是一个不包含任何*cupsFilter: ...
行的PPD。):
最初,使用名为2dir
的(教育)CUPS后端。可以从这个网站复制一个:KDE Printing Developer Tools Wiki。 确保复制时你得到的行结尾是正确的(类Unix)。
设置初始队列的命令行:
lpadmin \ -p pdfqueue \ -v 2dir:/tmp/pdfqueue \ -E \ -P /path/to/postscript-printer.ppd
2dir
后端现在将所有输出写入目录/tmp/pdfqueue/
,并且每个作业都使用uniq名称。每个结果 现在应该是PostScript文件 。 (没有你想要的修改)。
在/etc/cups/ppd/
中找到此队列使用的PPD(其名称应为pdfqueue.ppd
)。
添加以下行(最好,靠近PPD顶部):
*cupsFilter: "application/pdf 0 -"(确保
*cupsFilter
从行的最开始处开始。) line告诉cupsd
自动设置生成PDF的过滤链,然后在通过后端将文件发送到打印机之前调用名为'-'
的最后一个过滤器。 '-'
过滤器是一个特殊过滤器:它什么都不做,它是 passthrough 过滤器。
重新启动CUPS计划程序:
sudo launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist sudo launchctl load /System/Library/LaunchDaemons/org.cups.cupsd.plist
从现在开始,pdfqueue
将导致打印到其中的每个作业在/tmp/pdfqueue/*.pdf
中以 作为PDF 结束。
研究2dir
后端脚本。这是简单的Bash,并且得到了相当好的评论。
修改2dir
,以便在/tmp/pdfqueue/*.pdf
...
更新:我上面原先规定的*cupsFilter: ...
行似乎忘记了2个引号。遗憾!
答案 1 :(得分:5)
我真的希望我能接受两个答案,因为如果没有@Kurt Pfeifle对Mac特定内容的帮助并且只是理解打印机驱动程序和文件位置,我不认为我可以做到这一点。但这就是我所做的:
从codepoet cups-pdf-for-mac-os-x下载源代码。 (对于非mac,您可以查看http://www.cups-pdf.de/)自述文件非常详细,如果您仔细阅读所有说明,它将会起作用,但是我在获取所有部分时遇到了一些麻烦,所以我将概述正是我为了拯救别人一些麻烦所做的一切。为此,带有源代码的目录名为“cups-pdfdownloaddir”。
编译src文件夹中包含的cups-pdf.c作为自述文件指定:
gcc -09 -s -lcups -o cups-pdf cups-pdf.c
可能会有警告:ld: warning: option -s is obsolete and being ignored
,但这对我没有任何问题。将二进制文件复制到/ usr / libexec / cups / backend。您可能需要sudo
命令,它会提示您输入密码。例如:
sudo cp /cups-pdfdownloaddir/src/cups-pdf /usr/libexec/cups/backend
另外,不要忘记更改此文件的权限 - 它需要root权限(700),将cupd-pdf移动到后端目录后可以使用以下内容进行更改:
sudo chmod 700 /usr/libexec/cups/backend/cups-pdf
编辑/cups-pdfdownloaddir/extra/cups-pdf.conf中包含的文件。在“PDF转换设置”标题下,在GhostScript下找到一条读取#GhostScript /usr/bin/gs
的行。如果我需要它,我没有取消注释,只是在它下面添加了行Ghostscript /usr/bin/pstopdf
。 (任何这些修改都不应该有前缀#)
在GSCall下找到读取#GSCall %s -q -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile="%s" -dAutoRotatePage\
s=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite \
-f %s
的行再次在没有取消注释的情况下,在此我添加了行GSCall %s %s -o %s %s
在PDFVer下找到读取#PDFVer 1.4
并将其更改为PDFVer
,没有空格或跟随字符的行。
现在保存并退出编辑,然后使用以下命令将此文件复制到/ etc / cups
sudo cp cups-pdfdownloaddir/extra/cups-pdf.conf /etc/cups
小心在文本编辑器中进行编辑,因为UNIX和Mac环境中的换行符不同,可能会破坏脚本。您总是可以使用perl命令删除它们,但我是偏执狂,并且首先不想处理它。
您现在应该可以打开程序(例如Word,Excel,...)并选择文件>>打印并找到名为CUPS-PDF的可用打印机。打印到此打印机,您应该在/ var / spool / cups-pdf / yourusername /中找到您的pdf。
*另外,我认为这可能会有所帮助,因为它帮助了我:如果在遵循这些指示时出现问题,你需要重新开始/删除它,以便删除你需要的驱动程序(1)从/usr/libexec/cups/backend
移除cups-pdf后端(2)从/etc/cups/
移除cups-pdf.conf(3)进入系统偏好设置>>打印&传真并删除CUPS-PDF打印机。
这是我为自己成功设置pdf后端/过滤器的方法,但是有更多详细信息,以及自述文件中包含的有关自定义的其他信息。希望这有助于其他人!