【问题标题】:Creating a Print Monitor / Print Handler创建打印监视器/打印处理程序
【发布时间】:2013-12-09 16:22:40
【问题描述】:

我在开始使用带有 WDK 8 的 Visual Studio 2012 Ultimate 为 Windows 构建打印监视器/打印处理程序时遇到了麻烦。基本上,这就是我想要完成的:

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

我觉得打印处理程序部分不应该太难,但从打印监视器开始是我坚持的。我会在 VS12 中做什么?我看到“打印机驱动程序 V4”、“打印机驱动程序 V4 属性包”和“打印机 XPS 渲染过滤器”选项。我应该使用其中一个模板吗?如果是,我会在其中做什么?任何指出我正确方向的东西都将不胜感激!

编辑:

再澄清一下 - 我只需要打印输出中的文本,但我从各种来源中了解到,获取纯文本输出会导致 Firefox 等来源根本没有输出,因为它们将文本打印为字形.

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

【问题讨论】:

  • 让我们从头开始。你说你想生成一些打印数据并处理它。打印数据有很多种,您需要哪一种将决定您应该如何进行。例如,您只需要文本还是带有图形的文本?你会想要在屏幕上显示这个输出吗?您需要停止编写代码并明确您的目标。
  • 抱歉没有更清楚!从技术上讲,我只需要打印输出中的文本,但我从各种来源中了解到,获取纯文本输出会导致 Firefox 等源根本没有输出,因为它们将文本打印为字形。我不需要在屏幕上输出它;我将解析关键字的文本,然后将该信息以特定格式上传到网络服务器。

标签: visual-studio-2012 printing driver wdk


【解决方案1】:

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

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

获取 Microsoft 示例代码来构建、安装和运行基本上很简单,但如果您是 WDK 和安装打印驱动程序的新手,请计划在这方面花费一周或更长时间。字形索引翻译部分要复杂得多,您应该计划在这方面花费更多时间。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多