我想创建一个虚拟打印机,将数据传递给我的.NET应用程序。然后我想创建一个安装程序,安装打印机和.NET应用程序。非常希望能够全部使用C#编写,但我感觉这需要编写未经管理的代码来编写打印机驱动程序。是否有比较清晰的教程或示例可以学习如何完成此操作?
使用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安装中,您需要选择 使用C++进行桌面开发
, 以获取正确的SDK。如果您没有,请查看下面的答案如何添加它。
https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit
然后下载Windows-driver-samples主文件夹的 .zip
文件:
https://github.com/Microsoft/Windows-driver-samples/archive/master.zip
请到文件夹<UnzipFolder>\print\XPSDrvSmpl
,然后在Visual Studio中打开XPSDrvSmpl.sln
。接下来请按照微软在GitHub上的指南进行操作。您可以看到该指南适用于Visual Studio 2015,但我认为它也适用于2017版(尚未测试):您可以将您的应用程序简单地公开,就像LPD类型的打印机或监视器端口9100一样。然后,您可以安装任何喜欢的打印驱动程序,并将其指向您的应用程序。
我在寻找类似问题的答案时,通过维基百科找到了这个链接 - http://www.colorpilot.com/emfprinterpilot.html(可以创建不同语言的虚拟打印机)。
我认为解释PDF的方法也不是什么好办法。我不知道你为什么想做你想做的事情。也许你正在尝试编写自己的PDF打印机。
我认为你应该真正看看Windows驱动程序开发。如果你想开发打印机驱动程序,我认为你必须使用C++来完成。
祝你好运。