在.NET中创建自定义打印端口

时间:2011-02-05 00:03:03

标签: c# printing

我试图弄清楚是否可以在.NET中创建自定义打印端口。 我试图实现的功能是拦截打印机驱动程序生成的数据,并将其发送到远程服务器而不是设备。

3 个答案:

答案 0 :(得分:6)

是的,确实如此。我是用C#编写的,编写了一个由软件控制的PDF打印机。

实现目标的步骤是:

  1. 使用RedMon
  2. 创建新端口
  3. 设置将输出发送到应用程序的端口
  4. 编写一个获取传入流的应用程序并将其发送到任何您想要的地方
  5. 以下是您的自定义应用程序的一堆代码:

       string fname = Environment.GetEnvironmentVariable("TEMP") + @"\";
        fname += DateTime.Now.ToString("yyyyMMdd-hhmmss-fffff") + ".ps";
        FileStream fs = new FileStream(fname, FileMode.Create);
        StreamWriter sw = new StreamWriter(fs);
        StreamReader sr = new StreamReader(Console.OpenStandardInput());
        sw.Write(sr.ReadToEnd());
        sw.Flush();
        sw.Close();
        sr.Close();
    

    我编辑我的帖子以回答你的评论:

    1. 您可以在Windows7上轻松使用Redmon。我使用我的打印机没有任何问题,我认为你也可以在Windows 2008中做到这一点。 如果您想了解如何在没有安装程序的情况下安装redmon端口,请查看PDFCreator设置源。 如果你愿意我可以解释如何做到这一点,并可以发布C#实现,但我认为这不是你现在所需要的。
    2. 您可以将单个Redmon端口与任意数量的打印机配合使用,而不仅仅是一个;当您的软件从打印机接收假脱机作业时,使用为您设置的环境变量Redmon,您可以读取发送作业的打印机的名称...这样您就可以根据这个来决定要做什么。

答案 1 :(得分:1)

不是真的。创建虚拟端口驱动程序或网络重定向器都需要本机代码。然而...

您可以通过安装网络打印端口并在.NET中实现服务器端来捕获数据。例如,LPR会要求您创建一个TCP套接字服务器,这在C#中完全可行。

我不知道任何现有的C#实现,但您可以从p910nd的源代码中学到很多东西。

答案 2 :(得分:0)

您还可以通过安装免费实用程序mfilemon来使用多文件端口。借助此端口,您可以将打印机的输出定向到您希望的文件夹,然后您也可以启动您的应用程序。