你能帮我回答以下问题吗..。
发布于 2011-07-20 21:21:02
你需要的是一个端口监视器。可以使用在WDK中找到的Microsoft Postscript驱动程序创建虚拟打印机。您不需要为这个部分提供任何代码,只需要一个INF和PPD文件来描述您的虚拟打印机。一旦你的工作和安装,用户就会看到你的虚拟打印机时,他们从一个应用程序打印。此打印机将生成与任何标准Postscript打印机类似的Postscript流,然后将其发送到打印机的端口监视器。
现在添加一个端口监视器来处理将Postscript流转换为您需要的任何格式。端口监视器比打印驱动程序更容易处理。
编辑:安迪在评论中指出,v4 (即,Win8)打印驱动程序不支持自定义端口监视器。然而,v3驱动程序仍将在Win8中工作。
发布于 2013-08-28 21:30:01
我知道这很古老,但在几个月前,当我开始这个项目的时候,这些答案会对我有所帮助。我花了很多时间创建一个端口监视器,最终找到了一个更简单的方法(参见下面的WritePrinter链接)。
如果我需要一个将PostScript流转换成不同格式的虚拟打印机,我需要从头开始实现虚拟打印机还是实现呈现插件?
渲染插件是你想要的。
呈现插件似乎只支持某些自定义。
对
此外,数据总是被送到假脱机程序,在这种情况下不需要这样做。
这不应该是一个问题。
如果我实现一个虚拟打印机驱动程序,它是否完全取代了微软的PostScript驱动程序或微软通用驱动程序?
如果实现呈现插件,它不会替换PS/Uni驱动程序。PS/Uni驱动程序实际上被大量使用(可能90%?)所有的“打印机驱动程序”。制造打印机的原始设备制造商不想写他们自己的驱动程序,所以他们使用PS/Uni驱动程序设计--一些创建UI插件,一些渲染插件,一些两者兼而有之。
由于我的驱动程序是虚拟的,那么编写符合PostScript或通用驱动程序的驱动程序重要吗?
这取决于您希望数据采用何种格式。如果你想要位图格式,Uni驱动程序更好,如果你想要PostScript格式,PS更好。如果您希望为每一行绘制的数据、文本输出和其他GDI操作提供数据,那么两者都可以。
除了实现虚拟打印机驱动程序之外,还有其他方法将打印的文档转换为自定义文档格式吗?我能挂个端口监视器什么的吗?据我所能理解,我想不是。
大多数希望原始访问PostScript数据的人(通常使用GhostScript将其转换为PDF或其他格式)使用端口监视器进行此操作。例如,Adobe随Acrobat (Writer)的完整版本附带的Virtual打印机(Writer)为PSCRIPT5驱动程序使用了一个端口监视器,以及一个呈现插件和UI插件。
端口监视器的问题是它没有在用户的上下文中运行--而不是在执行打印的应用程序/进程的上下文中运行。它在打印假脱机程序的上下文中运行,需要大量的黑客来确定哪个用户/会话正在进行打印。
例如,如果您希望位图数据保存为JPG/BMP/PNG,那么只需为通用打印机驱动程序创建一个呈现插件,并访问/保存IPrintOemUni::过滤图形中的位图数据。
如果您希望PostScript数据与GhostScript (或其他库或您自己的代码)一起使用以转换为PDF或其他格式,那么只需为PSCRIPT5驱动程序创建一个呈现插件,并在IPrintOemUni2::书写打印机中访问/保存PS数据。
在这两种情况下,您都需要一个呈现插件。如果您想在打印时轻松地显示UI,并且希望您的代码在与用户相同的上下文中运行,而不是在假脱机服务中运行,那么请确保将打印机设置为直接打印到打印机--绕过假脱机程序。如果使用AddPrinter安装打印机,则使用直接标志。
发布于 2010-02-11 21:45:59
我不确定我完全明白。你有一个产生Postscript的应用程序,你想把它转换成别的东西吗?如果应用程序输出“打印就绪”数据,那么一个新的打印机驱动程序将不会有帮助,因为“队列/驱动程序”只是将数据发送到打印机的一种方式,而不是创建输出文件的东西。
您最好看看下面这样的内容:雷德蒙
这可以获得输出并生成一个新的进程。这样做的目的是让它将Postscript输出到一个文件中,然后启动一些针对它创建的控制台.exe。
这只是个想法。
https://stackoverflow.com/questions/2190476
复制相似问题