【发布时间】:2010-09-20 10:37:05
【问题描述】:
我希望创建一个将数据传递到我的 .NET 应用程序的虚拟打印机。然后我想创建一个安装打印机和 .NET 应用程序的安装程序。如果能够全部用 C# 编写,我们真的很高兴,但我有一种感觉,这需要编写的打印机驱动程序是非托管代码。有谁知道一个相当干净的教程或如何做到这一点的例子?
【问题讨论】:
我希望创建一个将数据传递到我的 .NET 应用程序的虚拟打印机。然后我想创建一个安装打印机和 .NET 应用程序的安装程序。如果能够全部用 C# 编写,我们真的很高兴,但我有一种感觉,这需要编写的打印机驱动程序是非托管代码。有谁知道一个相当干净的教程或如何做到这一点的例子?
【问题讨论】:
访问http://www.printerplusplus.com。它是开源的.NET 虚拟打印机。它为您提供了一个安装程序和一个 .NET 类,用于编写代码来处理您的“打印机数据”。
【讨论】:
使用 Github 项目完全符合您的要求:Microsoft/Windows-driver-samples/print/XPSDrvSmpl
https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl
应用程序:监听内部端口
流程:从单个安装程序安装打印机和应用程序。当应用程序侦听内部端口时,用户使用您的驱动程序打印一些东西。当发送数据时,应用程序会接收它。这是针对 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 构建驱动程序解决方案,请执行以下步骤。
此时,Visual Studio 2015 将能够构建驱动程序包并将文件输出到磁盘。要配置驱动程序签名和部署,请参阅开发、测试和部署驱动程序。
https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl#build-the-sample
【讨论】:
我认为您将不得不做很多 WinAPI 包装。开始研究 在Windows Driver Development Kit 上找到你必须做的事情。
我还为 .NET 找到了这个广告 Printer Driver Resource Toolkit...
【讨论】:
您可以简单地让您的应用程序像 LPD 类型打印机或监视器端口 9100 一样暴露自己。然后您可以安装任何您喜欢的打印驱动程序,并将其指向您的应用程序。
【讨论】:
正在寻找类似问题的答案,并通过维基百科找到此链接 - http://www.colorpilot.com/emfprinterpilot.html(允许创建不同语言的虚拟打印机)
【讨论】:
为什么不考虑使用替代方法。就像使用中间现成的打印程序一样,例如那些免费提供的 Print-to-PDF 应用程序。然后,您所需要的就是使用一些 3rd 方库(也具有免费和开源差异)来解码 PDF,而不是绞尽脑汁重新发明轮子。根据您认为合适的格式,您还可以考虑使用其他 Print-to-XXX 应用程序。
【讨论】:
我也不认为解释 PDF 方法有什么好处。我不知道你为什么想做你想做的事。也许您正在尝试编写自己的 PDF 打印机。
我认为你真的应该看看 Windows 驱动程序开发这件事。如果您想开发打印机驱动程序,我认为您必须使用 C++ 来完成。
祝你好运。
【讨论】:
如果我没记错的话,Microsoft 在打印机驱动程序开发中不支持 .NET。我还没有遇到过纯 .NET 打印机驱动程序。你会是一个非常勇敢的人这样做!网站“Printer Driver Resource Toolkit”并没有说驱动程序是用 .NET 编写的
【讨论】: