2017-06-21 225 views
2

我想用Ghostscript制作自己的“PDF打印机”。Ghostscript PDF打印

大多数解决方案我发现在互联网上的涉及第三方像雷德曼重定向PS打印机的GS可执行文件。

有没有办法做同样没有第三方(除GS等)?

这里是我的2个想法:

  • 绕道打印驱动程序和软件直接生成的PostScript(从GDI到后记,使用也许像图元文件设备上下文定制的设备上下文存在)

  • 以编程方式为要转换的每个文档创建一个新的本地端口。也许使用这种技术:https://stackoverflow.com/a/1331777/99276

第一个解决方案将是巨大的,但找不到任何关于它。

而我efraid第二个是在所有的效率不高(并检测当文档被完全印刷可以是棘手的)

回答

0

首先;请注意,Windows打印系统已在Windows Vista及更高版本中重新设计。虽然旧系统在WIndows 7和8仍然有效,但我不确定它在Windows 10中的可用性。在Windows 10中,一切都通过XPS进行,我认为(可能是错误的)PostScript是通过先经由XPS生成的。

你的第一个想法对我来说听起来不合理。如果您没有打印机驱动程序,您如何拥有打印机(并允许您的应用程序进行打印)?即使你可以这样做,为什么你会从GDI创建PostScript,然后将它发送给Ghostscript并让它创建PDF?直接创建PDF将会更加合理。

在我不知道如何添加一个新的本地端口会帮助你在所有的第二种情况。端口只是打印机驱动程序的输出指向的位置。什么是端口监视器(RedMon是端口监视器)所做的是重定向发送到端口的数据流,并用它“做点什么”。在Ghostscript + RedMon的情况下,'something'是创建一个PDF文件。

我不清楚为什么你不希望使用雷德曼,因为你使用的Ghostscript显然高兴。但是,如果你真的不想这样做,那么编写你自己的端口监视器。该过程记录在Windows设备驱动程序开发工具包中,并不是特别困难。如果您遇到困难,您甚至可以查看RedMon代码作为指导。例如,请参阅here

+0

他们想到了所有这些。 使用postscript的想法是,我不必像自己覆盖设备上下文一样自己绘制PDF。 然后,本地端口背后的想法是它在光盘上输出Postscript文件,而不会提示像FILE端口那样的文件位置。 最后是我已经看了redmon源代码。但如果它是我唯一的解决方案,我会这样做。 – MiniScalope

+0

从Windows绘图操作创建PDF并不困难,然后从相同的操作创建PostScript程序,请相信我。当然,您可以创建保存到特定文件的本地端口,但是您需要代码才能对该文件名进行扫描并在找到该文件时对其进行处理。这是可能的(早期版本的Adobe'PDF打印'功能做到了这一点,其他实现也如此)。但其(相对)处理器价格昂贵。如果扫描程序崩溃并且用户打印另一个文件,它也容易丢失数据。 – KenS