Создайте пользовательский порт печати в .NET - PullRequest
3 голосов
/ 05 февраля 2011

Я пытаюсь выяснить, возможно ли создать пользовательский порт печати в .NET.Функциональность, которой я пытаюсь добиться, - перехватывать данные, сгенерированные драйвером принтера, и отправлять их на удаленный сервер вместо устройства.

Ответы [ 3 ]

6 голосов
/ 05 февраля 2011

Да, это так.Я сделал это на 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();

Я редактирую свой пост, чтобы ответить на ваш комментарий:

  1. Вы можете легко использовать Redmon на Windows7.Я без проблем справляюсь с принтером и думаю, что вы можете сделать это и в Windows 2008.Если вы хотите узнать, как можно установить порт redmon без установщика, взгляните на исходный код установки PDFCreator.Если вы хотите, я могу объяснить, как это сделать, и опубликовать реализацию C #, но я не думаю, что это то, что вам сейчас нужно.
  2. Вы можете использовать свой единственный порт Redmon с любым количеством принтеров,не только один;когда ваше программное обеспечение получает задание из буфера с помощью среды vars Redmon, настроенной для вас, вы можете прочитать имя принтера, отправляющего задание ... так что вы можете решить, что делать в соответствии с этим.
1 голос
/ 05 февраля 2011

Не совсем.Для создания драйвера виртуального порта или сетевого перенаправителя требуется собственный код.Однако ...

Вы можете захватить данные, установив сетевой порт печати и внедрив серверную часть в .NET.Например, LPR потребует от вас создания сервера сокетов TCP, и это вполне осуществимо в C #.

Я не знаю ни одной существующей реализации C #, но вы могли бы многому научиться из исходного кода p910nd .

0 голосов
/ 08 января 2013

Вы также можете использовать мультифайловый порт, установив mfilemon, которая является бесплатной утилитой. С помощью этого порта вы можете направить вывод принтера в нужную папку, а затем запустить приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...