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

Sea*_*man 3 c# printing

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

Mar*_*rco 6

是的.我在C#中完成了它,编写了一个由软件控制的PDF打印机.

实现目标的步骤是:

  1. 使用RedMon创建一个新端口
  2. 设置端口以将输出发送到您的应用程序
  3. 编写一个获取传入流的应用程序,并将其发送到您想要的任何位置

以下是您的自定义应用程序的一堆代码:

   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();
Run Code Online (Sandbox Code Playgroud)

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

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