Я ищу создать виртуальный принтер, который передает данные моему .NET-приложению. Затем я хочу создать установщик, который устанавливает как принтер, так и приложение .NET. Было бы здорово, что мы могли бы написать все на С#, но у меня такое ощущение, что для этого потребуется драйвер принтера, который будет неуправляемым. Кто-нибудь знает довольно чистый учебник или пример того, как это сделать?
Написание виртуального принтера в .NET
Ответ 1
Посетите http://www.printerplusplus.com. Это виртуальный принтер .NET с открытым исходным кодом. Он предоставляет установщик и класс .NET для написания кода для обработки ваших "данных принтера".
Ответ 2
Сделал именно то, что вы просите, используя проект Github: Microsoft/Windows-driver-samples/print/XPSDrvSmpl
https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl
Установщик: http://wixtoolset.org/
Применение: прослушивание внутреннего порта
Поток: установить принтер и приложение из одного установщика. Пользователь печатает что-то с вашим драйвером, в то время как приложение слушает внутренний порт. Когда данные отправляются, приложение забирает их. Это для XPS, может быть преобразовано в PDF, но поток одинаков независимо от того, что вы печатаете. Если вам нужно что-то еще, посмотрите Microsoft/Windows-driver-samples/print/на GitHub или другие источники, соответствующие вашим потребностям.
Обновить:
Много вопросов о том, как заставить драйвер работать, вот небольшой пример:
Начните с загрузки Windows Driver Kit (WDK), если он еще не установлен. При установке выберите добавить расширение для Visual Studio, а также на последнем этапе. В вашей установке Visual Studio 2017 вам необходимо иметь Desktop development with C++
чтобы иметь нужные SDK. Если у вас его нет, посмотрите ниже, как добавить его.
Как добавить функции в Visual Studio 2017?
https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit
Затем загрузите .zip
файл для мастера Windows-драйвера-примеров:
https://github.com/Microsoft/Windows-driver-samples/archive/master.zip
Перейдите в папку <UnzipFolder>\print\XPSDrvSmpl
и откройте XPSDrvSmpl.sln
в Visual Studio.
Затем следуйте собственному руководству Microsoft на GitHub. Как вы можете видеть это для Visual Studio 2015, но я думаю, что это то же самое для 2017 года (еще не проверено):
Чтобы создать решение для драйвера с помощью Windows Driver Kit (WDK) 10 и Visual Studio 2015, выполните следующие действия.
- Откройте файл решения в Visual Studio 2015.
- Добавьте все недвоичные файлы (обычно расположенные в каталоге \install примера) в проект пакета: a. В обозревателе решений щелкните правой кнопкой мыши Файлы драйвера b. Выберите Добавить, затем нажмите Существующий элемент в. Перейдите в папку, в которую вы загрузили образец, и выберите все файлы в каталоге установки или эквивалентный набор недвоичных файлов, таких как INF, INI, GPD, PPD и т.д. D. Нажмите Добавить
- Настройте эти файлы для добавления в пакет драйверов: a. В обозревателе решений щелкните правой кнопкой мыши решение и выберите "Добавить"> "Новый проект". Выберите установочный пакет драйвера в разделе Visual C++/Windows Driver/Package. б. В обозревателе решений щелкните правой кнопкой мыши проект Package и выберите Properties. с. На левой панели выберите Свойства конфигурации> Установка драйвера> Файлы пакета. д. На правой панели используйте кнопку с многоточием (...), чтобы перейти к набору файлов, которые необходимо добавить в пакет драйверов. Все файлы данных, которые вы добавили на шаге 2-c, кроме файла INF, должны быть добавлены. Эта конфигурация для каждой архитектуры, поэтому эта конфигурация должна повторяться для каждой архитектуры, которая будет построена. е. Нажмите ОК.
- Откройте файл INF и отредактируйте его в соответствии со встроенным выводом. а. Откройте файл INF. б. В разделе Версия добавьте ссылку на файл каталога следующим образом: CatalogFile = XpsDrvSmpl.cat. с. В разделе SourceDisksFiles измените расположение создаваемых вами DLL файлов на = 1. Это указывает на то, что в этом драйвере нет конкретного архитектурного каталога. Если вы отправляете несколько архитектур одновременно, вам нужно будет сопоставить INF драйвера вручную.
На этом этапе Visual Studio 2015 сможет создать пакет драйверов и вывести файлы на диск. Чтобы настроить подпись и развертывание драйверов, см. Раздел Разработка, тестирование и развертывание драйверов.
https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl#build-the-sample
Ответ 3
Думаю, вам придется делать много оберток WinAPI. Начать исследование на Windows Development Development Kit, чтобы найти то, что вам нужно сделать.
Я также нашел этот коммерческий Инструмент ресурса драйвера принтера для .NET...
Ответ 4
Вы можете просто показать свое приложение как принтер типа LPD или порт монитора 9100. Затем вы можете установить любой подходящий драйвер печати и указать его в своем приложении.
Ответ 5
Ищет ответ для подобного вопроса и нашел эту ссылку через Википедию - http://www.colorpilot.com/emfprinterpilot.html (позволяет создавать виртуальные принтеры в разных языков)
Ответ 6
Почему бы не рассмотреть альтернативный подход. Подобно использованию промежуточной готовой программы печати, такой как свободно распространяемое приложение Print-to-PDF. Тогда вам нужно только расшифровать PDF, используя некоторую стороннюю библиотеку (у которой также есть свободная и открытая дисперсия), вместо того, чтобы взломать голову, чтобы изобрести колесо. Есть другое приложение Print-to-XXX, которое вы также можете рассмотреть в зависимости от формата, который вам подходит.
Ответ 7
Я тоже не понимаю, как интерпретировать PDF-подход. Я не знаю, почему вы хотите делать то, что хотите. Возможно, вы пытаетесь написать собственный PDF-принтер.
Я думаю, вы должны действительно взглянуть на Windows Driver Development. Если вы хотите разработать драйвер принтера, я думаю, вам нужно будет сделать это на С++.
Удачи.
Ответ 8
Вы не можете. Модель драйвера Windows является родной.
Ответ 9
Если я правильно помню, Microsoft не поддерживает .NET в разработке драйвера принтера. Мне еще не удалось найти чистый драйвер принтера .NET. Вы будете очень смелым человеком, чтобы сделать это! На веб-сайте "Инструментарий ресурсов драйвера принтера" не говорится, что драйвер написан в .NET.