创建打印监视器/打印处理程序

时间:2013-12-09 16:22:40

标签: visual-studio-2012 printing driver wdk

我在使用带有WDK 8的Visual Studio 2012 Ultimate构建Windows打印监视器/打印处理程序时遇到了麻烦。基本上,这正是我想要实现的目标:

  • 创建一个打印监视器(应用程序可以打印到的内容),它将生成一个包含应打印内容的文件(如默认的XPS打印机或PDF打印机),然后调用打印处理程序
  • 创建一个打印处理程序,它将解析生成的文件并对其执行某些操作(检查是否存在某些文本,在线上传文件等)

我觉得打印处理程序部分不应该太硬,但是从打印显示器开始就是我所坚持的。在VS12中我该怎么办?我看到“Printer Driver V4”,“Printer Driver V4 Property Bag”和“Printer XPS Render Filter”的选项。我应该使用其中一个模板,如果是这样,我会在其中做什么?任何指向我正确方向的东西都会受到赞赏!

编辑:

还有一些说明 - 我只需要打印输出中的文本,但我从各种来源读到,获取纯文本输出导致Firefox等来源根本没有输出,因为它们将文本打印为字形

我将使用print处理程序解析关键字的文本,然后以特定格式将该信息上传到Web服务器。打印监视器只需要从正在打印的应用程序中捕获并保存文本信息。

1 个答案:

答案 0 :(得分:1)

正如您在评论中指出的,某些应用程序(如Firefox)使用字形索引而非字符打印。事实上,相当多的事情已经变得越来越普遍。你需要的是一个打印驱动程序。好消息是微软已经为您编写了它,并为您提供了WDK中的示例源代码。首先,请查看this以了解您的选择。 Unidriver可能有点简单,但Postscript驱动程序的优点是可以生成输出,可以很容易地转换为PDF或其他保留文本信息的格式(与丢失所有文本信息的光栅页图像相反)。就我而言,不要考虑XPS;它只是一场灾难。

要处理字形索引,您需要做的是将代码添加到驱动程序的OEMTextOut函数中,该函数使用字体的cmap表来翻译字形索引回到字符代码。我不知道任何解析字体文件的公共域库,因此您可能必须编写自己的代码才能执行此操作。 (提示:如果仅支持OpenType/TrueType字体,则覆盖99%的打印应用程序。)

获取Microsoft示例代码以构建,安装和运行大多是直截了当的,但如果您是WDK的新手并安装打印驱动程序,请计划花一周或更长时间。字形索引翻译部分要复杂得多,你应该计划花更多的时间。