Подтвердить что ты не робот

Как создать виртуальный принтер в Windows?

Я хочу создать драйвер виртуального принтера для Windows. С чего начать? В WDK есть примеры драйверов печати, но я ничего не могу использовать. MSDN не очень помогает.

Существует много виртуальных принтеров для Windows (в основном они генерируют PDF файлы), как они это делают?

Приветствуются любые ссылки на документацию, которую я, кажется, пропустил.

Спасибо.

4b9b3361

Ответ 1

Когда я это сделал (примерно 12 лет назад), я начал с образца драйвера постскриптума, заменил все элементы, относящиеся к postscript (в моем случае, чтобы писать в растровое изображение вместо генерации команд postscript).

Я также написал пользовательский монитор печати (драйвер записывает в диспетчер очереди, который пишет на монитор): мой монитор записывает файл, а не, например. к параллельному порту.

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

Ответ 2

Вы можете посмотреть на разработку "минидрайвера" с Microsoft (Microsoft MDT), которая может помочь в зависимости от ваших конкретных потребностей. Если вам нужен порт (т.е. Вы собираетесь взять данные из существующего драйвера принтера и хотите обработать), вы можете посмотреть исходный код для RedMon. Он не поддерживает Vista/Win7, но может указывать на вас в правильном направлении.

Ответ 4

Один из драйверов, который вы упомянули, - open-source (GPL), возможно, вы могли бы изучить его источник или адаптировать его: http://www.pdfforge.org/products/pdfcreator/download

Ответ 5

Кто-то еще упомянул PDFCreator. Здесь более конкретная ссылка на их код, который создает принтер, порт и монитор. Несмотря на то, что я в VB, я могу следить за ним как с кем-то более привычным для С++, поэтому, я думаю, вы тоже можете. modPrinter.bas работает нога. modMain.bas, начиная с строки 28 и далее, вызывает в modPrinter.bas.

Ответ 6

Создайте монитор порта печати, сопоставьте этот порт с принтером, и вы получите данные, которые драйвер принтера отправит в порт.

рабочий пример того, как это делается в Cpp и java, можно найти здесь: http://www.mms-computing.co.uk/uk/co/mmscomputing/device/printmonitor/index.php