【问题标题】:Writing a Virtual Printer in .NET [closed]在 .NET 中编写虚拟打印机 [关闭]
【发布时间】:2010-09-20 10:37:05
【问题描述】:

我希望创建一个将数据传递到我的 .NET 应用程序的虚拟打印机。然后我想创建一个安装打印机和 .NET 应用程序的安装程序。如果能够全部用 C# 编写,我们真的很高兴,但我有一种感觉,这需要编写的打印机驱动程序是非托管代码。有谁知道一个相当干净的教程或如何做到这一点的例子?

【问题讨论】:

    标签: .net virtual printing


    【解决方案1】:

    访问http://www.printerplusplus.com。它是开源的.NET 虚拟打印机。它为您提供了一个安装程序和一个 .NET 类,用于编写代码来处理您的“打印机数据”。

    【讨论】:

    • 浪费了很多时间后:不适用于 Windows 8 及更高版本。
    • 网站不再工作了。
    【解决方案2】:

    使用 Github 项目完全符合您的要求:Microsoft/Windows-driver-samples/print/XPSDrvSmpl

    https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl

    安装者:http://wixtoolset.org/

    应用程序:监听内部端口

    流程:从单个安装程序安装打印机和应用程序。当应用程序侦听内部端口时,用户使用您的驱动程序打印一些东西。当发送数据时,应用程序会接收它。这是针对 XPS 的,可以转换为 PDF,但是无论您打印什么,流程都是相似的。如果您需要其他任何内容,请查看 GitHub 上的 Microsoft/Windows-driver-samples/print/ 或其他特定于您需求的资源。

    更新:

    很多关于如何让驱动程序工作的问题,所以这里是一个简单的例子:

    如果您尚未安装 Windows 驱动程序工具包 (WDK),请先下载它。安装时选择在最后一步添加 Visual Studio 的扩展。在您的 Visual Studio 2017 安装中,您需要拥有 Desktop development with C++ 才能拥有正确的 SDK。如果您没有它,请参阅下面有关如何添加它的分析器。

    How do I add features to Visual Studio 2017?

    https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

    然后为 Windows-driver-samples master 下载.zip 文件:

    https://github.com/Microsoft/Windows-driver-samples/archive/master.zip

    导航到文件夹 <UnzipFolder>\print\XPSDrvSmpl 并在 Visual Studio 中打开 XPSDrvSmpl.sln

    然后按照 Microsoft 在 GitHub 上的指南进行操作。如您所见,它适用于 Visual Studio 2015,但我认为 2017 年的情况相同(尚未测试):

    要使用 Windows Driver Kit (WDK) 10 和 Visual Studio 2015 构建驱动程序解决方案,请执行以下步骤。

    1. 在 Visual Studio 2015 中打开解决方案文件。
    2. 添加所有非二进制文件(通常位于 \install 目录中 示例)到Package项目:在解决方案资源管理器中, 右键单击驱动程序文件 b.选择添加,然后单击现有项目 c。 导航到您下载示例的位置,然后 选择安装目录中的所有文件,或等效的集合 非二进制文件,例如 INF、INI、GPD、PPD 文件等。 d. 点击添加
    3. 配置这些文件以添加到驱动程序包中:在里面 解决方案资源管理器,右键单击解决方案并选择添加 > 新建 项目。在 Visual C++/Windows 下选择驱动安装包 驱动程序/包。湾。在解决方案资源管理器中,右键单击包 项目并选择属性。 C。在左侧窗格中,单击 配置属性 > 驱动程序安装 > 包文件。 d。在里面 右窗格,使用省略号按钮 (...) 浏览到 需要添加到驱动程序包中的文件。所有数据 您在步骤 2-c 中添加的文件(INF 文件除外)应为 添加。这个配置是每个架构的,所以这个配置 必须为将要构建的每个体系结构重复。 e.点击 好的。
    4. 打开 INF 文件并对其进行编辑以匹配生成的输出。一种。打开 INF 文件。湾。在版本部分中,添加对目录的引用 像这样的文件:CatalogFile=XpsDrvSmpl.cat。 C。在里面 SourceDisksFiles 部分,更改您的 DLL 文件的位置 正在建设中,=1。这表明没有架构 此驱动程序中的特定目录。如果您运送多个 同时架构,您将需要整理驱动程序 手动 INF。

    此时,Visual Studio 2015 将能够构建驱动程序包并将文件输出到磁盘。要配置驱动程序签名和部署,请参阅开发、测试和部署驱动程序。

    https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl#build-the-sample

    【讨论】:

    • 驱动中是否有使用 utf-8 编码的选项?
    【解决方案3】:

    我认为您将不得不做很多 WinAPI 包装。开始研究 在Windows Driver Development Kit 上找到你必须做的事情。

    我还为 .NET 找到了这个广告 Printer Driver Resource Toolkit...

    【讨论】:

      【解决方案4】:

      您可以简单地让您的应用程序像 LPD 类型打印机或监视器端口 9100 一样暴露自己。然后您可以安装任何您喜欢的打印驱动程序,并将其指向您的应用程序。

      【讨论】:

      • 好主意。但是如何解析“LPD 数据”,或者任何来自端口的数据?
      • 通常是 515,它和大多数东西一样,是用户可定义的,但更多时候不是这样。 LPD 很好,因为有一个小标题,其中包含目标队列等信息,然后是实际数据。只需捕获一些数据,您就会发现,这非常简单。
      【解决方案5】:

      正在寻找类似问题的答案,并通过维基百科找到此链接 - http://www.colorpilot.com/emfprinterpilot.html(允许创建不同语言的虚拟打印机)

      【讨论】:

        【解决方案6】:

        为什么不考虑使用替代方法。就像使用中间现成的打印程序一样,例如那些免费提供的 Print-to-PDF 应用程序。然后,您所需要的就是使用一些 3rd 方库(也具有免费和开源差异)来解码 PDF,而不是绞尽脑汁重新发明轮子。根据您认为合适的格式,您还可以考虑使用其他 Print-to-XXX 应用程序。

        【讨论】:

          【解决方案7】:

          我也不认为解释 PDF 方法有什么好处。我不知道你为什么想做你想做的事。也许您正在尝试编写自己的 PDF 打印机。

          我认为你真的应该看看 Windows 驱动程序开发这件事。如果您想开发打印机驱动程序,我认为您必须使用 C++ 来完成。

          祝你好运。

          【讨论】:

            【解决方案8】:

            如果我没记错的话,Microsoft 在打印机驱动程序开发中不支持 .NET。我还没有遇到过纯 .NET 打印机驱动程序。你会是一个非常勇敢的人这样做!网站“Printer Driver Resource Toolkit”并没有说驱动程序是用 .NET 编写的

            【讨论】:

              猜你喜欢
              • 2011-01-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-04-29
              相关资源
              最近更新 更多