首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows虚拟打印机驱动程序

Windows虚拟打印机驱动程序
EN

Stack Overflow用户
提问于 2010-02-03 08:03:37
回答 4查看 9.3K关注 0票数 6

你能帮我回答以下问题吗..。

  • 如果我需要一个将PostScript流转换成不同格式的虚拟打印机,我需要从头开始实现虚拟打印机还是实现呈现插件?
  • 呈现插件似乎只支持某些自定义。此外,数据总是被送到假脱机程序,在这种情况下不需要这样做。
  • 如果我实现一个虚拟打印机驱动程序,它是否完全取代了微软的PostScript驱动程序或微软通用驱动程序?
  • 由于我的驱动程序是虚拟的,那么编写符合PostScript或通用驱动程序的驱动程序重要吗?
  • 除了实现虚拟打印机驱动程序之外,还有其他方法将打印的文档转换为自定义文档格式吗?我能挂个端口监视器什么的吗?据我所能理解,我想不是。
EN

回答 4

Stack Overflow用户

发布于 2011-07-20 21:21:02

你需要的是一个端口监视器。可以使用在WDK中找到的Microsoft Postscript驱动程序创建虚拟打印机。您不需要为这个部分提供任何代码,只需要一个INF和PPD文件来描述您的虚拟打印机。一旦你的工作和安装,用户就会看到你的虚拟打印机时,他们从一个应用程序打印。此打印机将生成与任何标准Postscript打印机类似的Postscript流,然后将其发送到打印机的端口监视器。

现在添加一个端口监视器来处理将Postscript流转换为您需要的任何格式。端口监视器比打印驱动程序更容易处理。

编辑:安迪在评论中指出,v4 (即,Win8)打印驱动程序不支持自定义端口监视器。然而,v3驱动程序仍将在Win8中工作。

票数 7
EN

Stack Overflow用户

发布于 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安装打印机,则使用直接标志。

票数 5
EN

Stack Overflow用户

发布于 2010-02-11 21:45:59

我不确定我完全明白。你有一个产生Postscript的应用程序,你想把它转换成别的东西吗?如果应用程序输出“打印就绪”数据,那么一个新的打印机驱动程序将不会有帮助,因为“队列/驱动程序”只是将数据发送到打印机的一种方式,而不是创建输出文件的东西。

您最好看看下面这样的内容:雷德蒙

这可以获得输出并生成一个新的进程。这样做的目的是让它将Postscript输出到一个文件中,然后启动一些针对它创建的控制台.exe。

这只是个想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2190476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档