编程过滤器/后端“打印到PDF”从任何Mac OS X应用CUPS(Programming a Fi

2019-06-25 17:45发布

好了,所以这里是我想做的事情。 我想补充一点,无论打印用户的文档为PDF和发送它关闭设备之前增加了一些头打印选项。

我想我的问题是:如何添加一个虚拟的“打印机”驱动程序将启动我一直在开发,这将使PDF应用程序的用户(或使PDF并启动我的引用应用到新生成的PDF )? 如何用CUPS接口,用以生成的PDF? 我不知道我是清楚的,所以让我知道如果有更多的信息将是有益的。

我曾通过此打印与CUPS的教程 ,似乎把一切都设置好了,但文件似乎永远不会出现在适当的临时位置。 如果有人正在寻找一个用户端PDF打印机, 这杯-PDF换MAC-OS-X是指通过安装程序的工作原理,但我没有文件出现在指定的目录中相同的问题时,我下载源代码并按照自述的说明。 如果任何人都可以得到其中任一对通过终端Mac上工作,请让我知道一步一步,你是如何做到的。

Answer 1:

要走的路是这样的:

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

  • 开始时,用(教育)CUPS命名后端2dir 。 :人们可以从这个网站复制KDE印刷开发工具的Wiki复印时,你得到的行尾右侧(类Unix)确保。

  • 命令行来设置初始队列:

      使用lpadmin \      -p pdfqueue \      -v 2dir:/ tmp目录/ pdfqueue \      -E \      -P /path/to/postscript-printer.ppd 
    2dir现在后端将写入所有输出目录/tmp/pdfqueue/ ,它会使用uniq的名称为每个作业。 每个结果应该现在是PostScript文件 。 (有没有修改你想要还)。

  • 找到由该队列中使用的PPD /etc/cups/ppd/ (它的名称应pdfqueue.ppd )。

  • 添加以下行(最好的,附近的PPD的顶部):

      * cupsFilter: “应用程序/ PDF 0  - ” 
    (确保*cupsFilter开始在该行的开始。)这一行告诉cupsd ,以自动设定产生PDF,然后调用指定的最后一个过滤器的过滤链'-'它通过后台将文件发送到前打印机。 这'-'过滤器是一种特殊的一个:它什么也不做,这是一个直通滤波器。

  • 重新启动CUPS调度:

      须藤launchctl卸载/System/Library/LaunchDaemons/org.cups.cupsd.plist  须藤launchctl负载/System/Library/LaunchDaemons/org.cups.cupsd.plist 

  • 从现在起,你的pdfqueue会导致打印到它各项工作最终以PDF /tmp/pdfqueue/*.pdf

  • 究其2dir后端脚本。 这是简单的bash,合理很好的注释。

  • 修改2dir中,在对结果保存之前将您所需的修改到PDF的方式/tmp/pdfqueue/*.pdf ...


更新:看起来像我忘了2个报价在我原先规定的*cupsFilter: ...线之上。 抱歉!



Answer 2:

我真希望我能接受两个答案,因为我不认为我能这样做没有所有的@Kurt Pfeifle的帮助为Mac细节和刚认识的打印机驱动程序和文件的位置做。 但这里是我所做的:


  1. 从codepoet下载源代码杯-PDF换MAC-OS-X 。 (对于非苹果电脑,你可以看看http://www.cups-pdf.de/ )自述大大详细的,如果你仔细阅读所有的指令,它会工作,但我有一个小麻烦都件,所以我将概述正是我在拯救别人一些麻烦的希望一样。 对于这一点,与源代码的目录被称为“杯具-pdfdownloaddir”。

  2. 编译包含在src文件夹杯,pdf.c的自述规定:

    gcc -09 -s -lcups -o cups-pdf cups-pdf.c

    有可能是一个警告: ld: warning: option -s is obsolete and being ignored ,但是这不构成问题对我来说。 复制二进制文件到/ usr / libexec目录/杯/后端。 你将有可能给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 /杯用下面的命令离开前编辑

    sudo cp cups-pdfdownloaddir/extra/cups-pdf.conf /etc/cups

    要小心在文本编辑器编辑的,因为在UNIX和Mac环境换行符是不同的,并有可能破坏脚本。 您可以随时使用一个Perl命令将其删除,但我偏执和不喜欢在第一时间处理它。

  4. 您现在应该能够打开一个程序(如Word,Excel和...),然后选择文件>>打印,并找到一个可用的打印机称为CUPS-PDF。 打印到这台打印机,你应该在默认情况下找到在/ var /卷轴/杯,PDF / yourusername /您的PDF。


*另外,我想是因为它帮助我,这可能是有益的:如果某样东西在下列指示搞砸了,你需要重新开始/摆脱它,为了消除你需要(1)取出杯子司机从-pdf后端/usr/libexec/cups/backend (2)请从杯-pdf.conf /etc/cups/ (3)进入系统偏好设置>>打印与传真和删除CUPS-PDF打印机。


这就是我成功地建立了一个PDF后端/过滤器为我自己,但有更多的细节,并包含在自述文件上定制的其他信息。 希望这可以帮助别人!



文章来源: Programming a Filter/Backend to 'Print to PDF' with CUPS from any Mac OS X application