在.NET中编写虚拟打印机

时间:2008-11-03 02:02:21

标签: .net virtual printing

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

9 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:9)

使用Github项目确切地问你的问题:Microsoft / Windows-driver-samples / print / XPSDrvSmpl

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

安装程序:http://wixtoolset.org/

应用程序:收听内部端口

Flow:从单个安装程序安装打印机和应用程序。当应用程序侦听内部端口时,用户使用您的驱动程序打印内容。发送数据时,应用程序会将其选中。这适用于XPS,可以转换为PDF,但无论您打印什么,流程都是类似的。如果您还需要其他任何内容,请查看GitHub上的Microsoft / Windows-driver-samples / print /或其他符合您需求的来源。

<强>更新

关于如何让司机在这里工作的很多问题都是一个简单的例子:

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

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

然后关注GofHub上的微软自己的指南。正如您所看到的,它适用于Visual Studio 2015,但我认为它在2017年是相同的(尚未测试):

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

  1. 在Visual Studio 2015中打开解决方案文件。
  2. 添加所有非二进制文件(通常位于\ install目录中) 样本)到Package项目:a。在Solution Explorer中, 右键单击驱动程序文件b。选择Add,然后单击Existing Item c。 导航到下载样本的位置,然后 选择安装目录中的所有文件或等效集 非二进制文件,如INF,INI,GPD,PPD文件等.d。 单击添加
  3. 配置要添加到驱动程序包中的这些文件:在里面 解决方案资源管理器,右键单击解决方案,然后选择添加&gt;新 项目。在Visual C ++ / Windows下选择Driver Install Package 驱动程序/包。湾在Solution Explorer中,右键单击Package 项目并选择属性。 C。在左侧窗格中,单击 配置属性&gt;驱动程序安装&gt;包文件。 d。在里面 右侧窗格,使用省略号按钮(...)浏览到该组 需要添加到驱动程序包的文件。所有数据 您在步骤2-c中添加的文件(INF文件除外)应该是 添加。此配置是按体系结构的,因此这种配置 必须对将要构建的每个体系结构重复。即点击 行。
  4. 打开INF文件并对其进行编辑以匹配构建的输出。一个。打开 INF文件。湾在“版本”部分中,添加对目录的引用 文件如下:CatalogFile = XpsDrvSmpl.cat。 C。在里面 SourceDisksFiles部分,更改你的DLL文件的位置 正在建设,= 1。这表明没有架构 此驱动程序中的特定目录。如果你发货多次 同时构建,您将需要整理驱动程序 INF手动。
  5. 此时,Visual Studio 2015将能够构建驱动程序包并将文件输出到磁盘。要配置驱动程序签名和部署,请参阅开发,测试和部署驱动程序。

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

答案 2 :(得分:8)

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

我还发现这个商业版Printer Driver Resource Toolkit用于.NET ...

答案 3 :(得分:5)

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

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

我认为你应该真的给Windows驱动程序开发一下。如果你想开发一个打印机驱动程序,我想你必须用C ++来做。

祝你好运。

答案 7 :(得分:-1)

你做不到。 Windows driver model是原生的。

答案 8 :(得分:-1)

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