对过滤器/后端进行编程,以便从任何 Mac OS X 应用程序使用 CUPS 进行'Print to PDF'



好的,这就是我想做的。 我想添加一个打印选项,该选项将用户的文档打印到 PDF 中,并在将其发送到设备之前添加一些标题。

我想我的问题是:如何为用户添加虚拟"打印机"驱动程序,该驱动程序将启动我一直在开发的应用程序,该应用程序将制作PDF(或制作PDF并使用对新生成的PDF的引用启动我的应用程序)? 如何与 CUPS 接口以生成 PDF? 我不确定我是否清楚,所以如果更多信息会有所帮助,请告诉我。

我已经完成了这个使用 CUPS 打印教程,似乎一切都设置得很好,但该文件似乎从未出现在适当的临时位置。 如果有人正在寻找用户端 PDF 打印机,这个 cups-pdf-for-mac-os-x 可以通过安装程序工作,但是当我下载源代码并按照自述文件中的说明进行操作时,我遇到了同样的问题,即指定的目录中没有出现任何文件。 如果有人可以通过终端让其中任何一个在 Mac 上工作,请让我知道您是如何做到的。

要走的路是这样的:

  • 使用您喜欢的任何驱动程序设置打印队列。但是我建议使用PostScript驱动程序/PPD(PostScript PPD是不包含任何*cupsFilter: ...行的)。

  • 最初,使用名为 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从行的开头开始。此行告诉cupsd自动设置生成 PDF 的过滤链,然后在通过后端将文件发送到打印机之前调用名为 '-' 的最后一个过滤器。'-'过滤器是一个特殊的过滤器:它什么都不做,它是一个直通过滤器。
  • 重新启动 CUPS 调度程序:

    sudo launchctl unload/System/Library/LaunchDaemons/org.cups.cupsd.plistsudo launchctl load/System/Library/LaunchDaemons/org.cups.cupsd.plist
  • 从现在开始,您的pdfqueue将导致打印到它的每个作业最终以 PDF 格式/tmp/pdfqueue/*.pdf .

  • 研究2dir后端脚本。这是简单的Bash,并且评论得相当好。

  • 修改2dir的方式将您想要的修改添加到您的 PDF 中,然后再将结果保存在 /tmp/pdfqueue/*.pdf ...


更新:看起来我忘记了上面最初规定的 *cupsFilter: ... 行中的 2 个引号。不好意思!

我真的希望我能接受两个答案,因为我认为如果没有 Pfeifle 对 Mac 细节的所有帮助以及仅仅了解打印机驱动程序和文件位置@Kurt我就无法做到这一点。 但这是我所做的:


  1. 从codepoet cups-pdf-for-mac-os-x下载源代码。 (对于非 mac,您可以查看 http://www.cups-pdf.de/) 自述文件非常详细,如果您仔细阅读所有说明,它将起作用,但是我在获得所有部分时遇到了一点麻烦,因此我将准确概述我所做的事情,希望为其他人省去一些麻烦。 为此,带有源代码的目录称为"cups-pdfdownloaddir"。

  2. 编译包含在 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

  3. 编辑包含在/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 命令来删除它们,但我很偏执,一开始就不想处理它。

  4. 您现在应该能够打开一个程序(例如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 后端/过滤器的方式,但是自述文件中包含更多详细信息以及有关自定义的其他信息。 希望这对其他人有所帮助!

相关内容

最新更新