Ghostscript PDF打印

4
我想使用Ghostscript制作自己的“PDF打印机”。我在互联网上找到的大部分解决方案都涉及第三方软件,如Redmon将PS打印机重定向到Gs可执行文件。 除了Gs之外,是否有一种不需要第三方(软件)的方法来实现相同的功能? 这是我的两个想法:
1. 通过软件绕过打印驱动程序并直接生成Postscript(从GDI到Postscript,可能会使用像元文件设备上下文这样的自定义设备上下文); 2. 为每个要转换的文档编程创建一个新的本地端口。也许可以使用这个技术:https://dev59.com/rUnSa4cB1Zd3GeqPKgog#1331777 第一个解决方案非常好,但找不到任何相关信息。
我担心第二个解决方案根本不高效(检测文档何时完全打印可能很棘手)。
更新:我使用打印API打印到临时文件中(打印是同步进行的),然后使用Gs转换PS文件。
1个回答

1
首先,注意Windows打印系统在Windows Vista及以上版本中已进行了重新设计。虽然旧系统仍可在Windows 7和8上使用,但我不确定在Windows 10中其可用性如何。在Windows 10中,所有内容都通过XPS进行处理,我认为(可能错了)通过XPS生成PostScript。
您的第一个想法对我来说似乎不可行。如果您没有打印机驱动程序,如何拥有打印机(并允许应用程序打印到它)?即使您可以这样做,为什么要从GDI创建PostScript,然后将其发送到Ghostscript并让其创建PDF?直接创建PDF更为合理。
在第二种情况下,我不明白添加新本地端口如何帮助您。端口只是打印机驱动程序输出的位置。端口监视器(RedMon是端口监视器)所做的就是重定向发送到端口的数据流,并“执行某些操作”。在Ghostscript + RedMon的情况下,“某些操作”是创建PDF文件。

我不太清楚为什么您不想使用RedMon,因为您显然很满意使用Ghostscript。但是,如果您真的不想这样做,那么请编写自己的端口监视器。该过程在Windows设备驱动程序开发工具包中有记录,而且并不特别难。如果您遇到困难,甚至可以参考RedMon代码作为指南。例如,请参见这里


他们考虑了所有这些。使用Postscript的想法是我不必像覆盖设备上下文那样自己绘制PDF。然后,本地端口的想法是它可以将Postscript文件输出到磁盘上而无需像FILE端口那样提示文件位置。最后,是的,我已经查看了redmon源代码。但如果这是唯一的解决方案,我想我会这样做。 - MiniScalope
从Windows绘图操作创建PDF并不比从相同操作创建PostScript程序更难,相信我。当然,您可以创建保存到特定文件的本地端口,但是那么您需要编写代码来扫描该文件名并在找到时进行处理。这是可能的(Adobe“PDF打印”功能的早期版本以及其他实现方式都是如此),但它(相对而言)需要更多的处理器资源。如果扫描程序崩溃并且用户打印另一个文件,则还会导致数据丢失。 - KenS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接