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


Виртуальный принтер в Windows


Решил опубликовать краткий мануал, как завести в windows виртуальный принтер. Этим способом пользуюсь уже почти 5 лет. И частенько он меня выручал.

Выручал, когда:

- Переводил офис на линукс. Есть машина с Windows недалеко от принтера. Или принт-сервер. А дров под Линукс под него нет
- Даже если и есть дрова под Линукс, а рядом есть комп только с виндой. И принтер сей нужно подключить более чем у 10 человек. Если вы помните, в Windows XP home возможно 5 входящих подключений, а в Prof - 10. Не ставить же из-за этого Windows Server (как, кстати говоря, и было до моего прихода ...)
- Обслуживал офис, где только виндовые клиенты. Но купили они ноут с супур-мега крутой Windows 7 _64 bit_. И оказалось, что на их основной принтер нет дров под vista/7 x86-64. Поставил виртуальный принтер и проблема была решена

0. Итак, первым делом нужно настроить принтер обычным образом. Убедиться, что он работает, печатает и всё такое.

1. Далее, устанавливаем последние версии Ghostscript и GSview отсюда (GSview) и redmon.

Я всё (относящиеся к виртуальному принтеру) устанавливаю в c:\gs, чтобы оно не болталось непонятно где. Через пол года-год как начнёшь вспоминать, что к чему, если мануал посеялся...

2. Так вот. Теперь заходим в директорию, куда мы установили GSview (у меня это C:\gs\Ghostgum\gsview), и создаём файл gsprint.cfg со следующим содержанием:

-noquery -printer SHARP -ghostscript "C:\gs\gs8.54\bin\GSWIN32C.EXE"

В примере указан принтер SHARP. Вам же надо вписать туда своё название. Смотрите, не ошибитесь! Лучше зайти в свойства принтера и скопировать название, как оно есть. Последняя строчка, это путь к программе PostScript. Понятное дело, версию нужно свою указать. Так же, можно приписать отдельной строкой параметр "-color", если у вас цветной принтер. Хотя, если и не цветной, строка будет просто игнорироваться.

3. Теперь, если вы хотите проверить, работает ли всё то, что мы уже настроили, нужно открыть "командную строку" (cmd) и в ней зайти в "C:\gs\gs8.54\examples" (с поправкой на вашу версию PostScript). И там попробовать распечатаьь один их примеров. К примеру:

gsprint chess.ps

В итоге должна будет напечататься страница с шахматами. Если этого не произошло, необходимо искать ошибку. Если же всё хорошо, двигаемся дальше.

4. Переходим к RedMon. Его достаточно просто распаковать в c:\gs\redmon и там запустить setup.exe. После сего действа у нас появится возможность "перенаправлять порт" с виртуального принтера на реальный.

5. Создаём виртуальный принтер: Установка принтера -> Локальный принтер -> Создать новый порт -> Redirected Port -> RPT1: -> Ok :)

Дальше всё как обычно. Драйвер можно выбрать, например, "Apple LaserWriter II NT", или "Apple Color LW 12/660 PS", или "HP LaserJet 4/4M PostScript". Последний предпочтительнее. Ибо, если вдруг попадётся эта бяка vista/7 x86-64, драйверов x86-64 для первых двух не существует :(

6. Создали новый (виртуальный) принтер, открываем свойства оного, вкладку "Порты", затем "Настройки порта".

Настройка redirect port printer

В "Redirect to program" вставляем "C:\GS\GSVIEW\GSPRINT.EXE", а в "Arguments for program" просто тире, прочерк, то есть "-" без пробелов и прочего. И остальное как на скриншоте:

Там ещё есть "Run: Hidden". Это чтобы досовское окно не выскакивало при каждой печати. Для отладки лучше пусть будет "Normal", но имейте ввиду...

Так же, для отладки можно включить ведение лога и указать место, где этот лог искать. Опять же, я предпочитаю c:\gs. Но, если всё работает, нужен вам тот лог? :)

Написано много, а настраивается всё за пару минут. Тем более, если программы уже давно скачаны и есть пример готового файла gsprint.cfg

Похожая статья: Настройка PDF-принтера в Windows

Как создать виртуальный принтер: Quark Software Inc.

Добавление виртуального принтера в Mac OS X 10.5 (Leopard):


  1. Запустите Print & Fax Utility (щелкните в меню Apple, выберите Системные настройки и щелкните Системные настройки Print & Fax ).

  2. Нажмите на замок, чтобы внести изменения или пройти аутентификацию.

  3. Нажмите кнопку «» (плюс) прямо над замком.

  4. Выберите IP-адрес в меню.

  5. Выберите Internet Printing Protocol - IPP во всплывающем меню «Протокол».

  6. В поле Адрес введите 127.0.0.1.

  7. В поле Имя введите 127.0.0.1.

  8. Выберите Generic PostScript Printer в раскрывающемся меню «Печать с помощью».

  9. Щелкните Добавить .

  10. Закройте окна Print & Fax и Системные настройки .

Добавление виртуального принтера в Mac OS X 10.4 (Tiger):


  1. Запустите Printer Setup Utility (Applications / Utilities / Printer Setup Utility).

  2. Щелкните Добавить . Откроется диалоговое окно «Браузер принтера».

  3. Выберите IP-принтер .

  4. Выберите Internet Printing Protocol - IPP во всплывающем меню «Протокол ».

  5. В поле Адрес введите 127.0.0.1.

  6. В поле Имя введите 127.0.0.1.

  7. Выберите Apple в раскрывающемся меню Печать с использованием .

  8. В списке Модель выберите принтер PostScript, например Apple Color LaserWriter 12/600 PS v2014.108.

  9. Щелкните Добавить, nd, затем щелкните Продолжить , если отобразится диалоговое окно.

  10. На экране Installable Options щелкните Continue . 127.0.0.1 отображается как принтер в окне списка принтеров.

  11. Выберите принтер 127.0.0.1 и затем щелкните По умолчанию .

  12. Закройте программу настройки принтера .

Добавление виртуального принтера в Mac OS X 10.3 и более ранних версиях:


  1. Для Mac OS X 10.3 запустите Printer Setup Utility (Applications / Utilities / Printer Setup Utility). Для версий Mac OS X до 10.3 запустите Print Center (Applications / Utilities / Print Center).

  2. Щелкните Добавить .

  3. Выберите IP Printing из раскрывающегося меню вверху.

  4. В поле Адрес принтера введите 127.0.0.1.

  5. Щелкните Добавить . 127.0.0.1 отображается как принтер в окне списка принтеров.

  6. Выберите принтер 127.0.0.1 и затем щелкните По умолчанию .

  7. Выйти из приложения.

Добавление виртуального принтера в Windows 7


  1. Выберите Пуск > Устройства и принтеры



  2. Нажмите Добавить принтер



  3. Выберите Добавить локальный принтер



  4. Выберите вариант Использовать существующий порт и выберите LPT1 (Печать в файл)



  5. Выберите вариант из Производитель



  6. Отметьте опцию Используйте драйвер, который я в настоящее время установил.



  7. Отметьте опцию Не сообщать



  8. Нажмите Готово .



Добавление виртуального принтера в Windows Vista:


  1. Выберите Пуск> Панель управления .

  2. Дважды щелкните значок Printers .

  3. Выберите значок Добавить принтер в меню «Файл». Откроется окно Мастер установки принтера .

  4. Выберите Добавить опцию Local Printe r.

  5. Нажмите Далее .

  6. Выберите вариант « Использовать существующий порт» , а затем выберите ФАЙЛ: (Печать в файл) из раскрывающегося меню.

  7. Нажмите Далее.

  8. Выберите принтер PostScript, например HP Color LaserJet 8500 PS.

  9. Нажмите Далее .

  10. Выберите вариант « Использовать установленный в данный момент драйвер (рекомендуется) ».

  11. Нажмите Далее .

  12. Появится экран Введите имя принтера .

  13. Введите имя принтера и установите флажок Установить как принтер по умолчанию.

  14. Нажмите Далее .

  15. Отобразится экран печати тестовой страницы.

  16. Игнорировать Распечатайте тестовую страницу и щелкните Готово .

Добавление виртуального принтера в Windows 2000 и Windows XP:


  1. Выберите Пуск> Настройки> Панель управления .

  2. Дважды щелкните значок Printers and Faxes .

  3. Дважды щелкните значок Добавить принтер . Откроется окно Мастер установки принтера .

  4. Нажмите Далее . Отображается следующее сообщение: «Мастеру не удалось обнаружить принтер Plug and Play. Чтобы установить принтер вручную, нажмите «Далее».

  5. Нажмите Далее. Отображается экран « Выберите порт принтера» .

  6. Выберите Локальный принтер, подключенный к этому компьютеру и снимите флажок Автоматически определять и устанавливать мой принтер Plug and Play.

  7. Нажмите Далее .

  8. Выберите «Использовать следующий порт», а затем выберите ФАЙЛ: (Печать в файл) в раскрывающемся меню.

  9. Нажмите Далее .

  10. Выберите принтер PostScript, например HP Color LaserJet 8500 PS.

  11. Нажмите Далее. Отображается экран Дайте название своему принтеру r.

  12. Введите имя принтера и выберите Да под Вы хотите использовать этот принтер в качестве принтера по умолчанию?

  13. Нажмите Далее. Отобразится экран Совместное использование принтера .

  14. Выберите Не использовать этот принтер .

  15. Нажмите Далее . Отобразится экран Print Test Page .

  16. Выберите Нет под Вы хотите распечатать тестовую страницу .

  17. Щелкните Next, и затем щелкните Finish.


.

Написание виртуального принтера в .NET

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
.Учебники по виртуальному принтеру

- два пилотных проекта


На главную Загрузить Цены Часто задаваемые вопросы Руководство Учебные пособия Известные проблемы Новости

Здесь вы можете найти различные примеры использования нашей технологии виртуального принтера в ваших приложениях. Проиллюстрируем примеры кодом на C ++.

  1. Как перенести информацию с принтера в клиентское приложение
  2. Как создать собственное приложение предварительного преобразования
  3. Как создать собственное приложение пост-конвертера
  4. Как создать собственное приложение пост-конвертера, совместимое с режимом раннего доступа
  5. Как получить и установить ориентацию бумаги в принтере
  6. Как создать, добавить, установить, перечислить, получить и удалить бумажную форму для указанного принтера
  7. Как получить, установить и пересчитать лоток для бумаги для указанного принтера
  8. Как получить, установить и перечислить разрешения печати для указанного принтера
  9. Как пересчитать данные формы бумаги для указанного принтера
  10. Как получить и установить DEVMODE для указанного принтера
  11. Как подсчитать принтеры в системе
  12. Как запустить, остановить, получить текущее состояние и перечислить зависимости для указанной службы Windows
  13. Как устанавливать, получать и удалять настройки для основных функций драйвера виртуального принтера
1.Как получить информацию с принтера в ваше клиентское приложение

После отправки документа на принтер он создает файл INI, в котором хранится вся необходимая информация о задании печати и файлах вывода:

INI-файл может быть передан вашему приложению через командную строку, именованный канал или сообщение WM_COPYDATA, для получения дополнительных сведений см. Документацию.

Для чтения информации из файла INI рекомендуем использовать вызовы WinAPI:

GetPrivateProfileInt для чтения целочисленного значения из файла INI:

[код C ++]

 // Получает значения ширины и длины бумаги из раздела [Документ] void foo (WCHAR const * pathToIniFile) { int width = GetPrivateProfileInt (L «Документ», L «Ширина бумаги», 0, pathToIniFile); int length = GetPrivateProfileInt (L «Документ», L «PaperLength», 0, pathToIniFile); } 

GetPrivateProfileString для чтения строкового значения из файла INI:

[код C ++]

 // Получает имя устройства из раздела [Device] и имя документа из раздела [Document]: void boo (WCHAR const * pathToIniFile) { DWORD const size = 256; WCHAR deviceName [размер] = {0}; WCHAR documentName [размер] = {0}; GetPrivateProfileString (L «Устройство», L «Имя устройства», L «», имя устройства, размер, pathToIniFile); GetPrivateProfileString (L «Документ», L «Имя», L «», имя документа, размер, pathToIniFile); } 

2.Как создать собственное приложение предварительного преобразования

Pre-converter - это приложение, которое виртуальный драйвер принтера вызывает перед преобразованием файлов EMF.

Создайте собственный предварительный конвертер, если хотите:

  • Обработайте файлы EMF перед их печатью, например, отредактируйте их
  • Установить пользовательские настройки преобразования EMF
  • Определите для каждого конкретного задания печати, будет ли оно принято или отклонено для печати

Используя предварительный преобразователь, вы можете обрабатывать файлы EMF по мере необходимости и изменять некоторые настройки драйвера виртуального принтера, такие как форматы вывода, водяные знаки, каталог вывода и другие, кроме настроек устройства (размер бумаги, разрешение, ориентация и т. Д.). Все эти настройки хранятся в реестре. Для получения дополнительной информации см. Документацию.

Вход и выход предварительного преобразователя следующие:

Virtual Printer Driver вызывает предварительный преобразователь, передавая путь к INI-файлу со свойствами задания на печать. В соответствии с вашими потребностями вы можете настроить драйвер виртуального принтера для отправки пути к файлу INI в предварительный преобразователь через командную строку, именованный канал или сообщение WM_COPYDATA.

Как работает предварительный преобразователь

Virtual Printer Driver получает задание на печать, извлекает файлы EMF, приостанавливает свои процессы, вызывает предварительный преобразователь и не возобновляет работу до тех пор, пока предварительный преобразователь не обновит статус задания на печать или просто не закроет.

Файл INI на этапе предварительного преобразования выглядит следующим образом:

INI-файл содержит пути ко всем файлам EMF в разделе [EMF] файла и статус задания на печать в разделе [Предварительное преобразование].

После обработки файлов EMF и настройки драйвера виртуального принтера предварительный преобразователь должен обновить статус задания на печать в файле INI.

Чтобы принять задание на печать, установите для параметра «Статус» значение «возобновлено» в файле INI:

 [Предварительное преобразование] Статус = возобновлено 

Чтобы отклонить задание на печать, установите для параметра «Статус» значение «отменено» в файле INI:

 [Предварительное преобразование] Статус = отменен 

Обратите внимание, что сразу после того, как предварительный преобразователь обновит файл INI, драйвер виртуального принтера возобновляет свои процессы.Поэтому, если предварительный преобразователь обновляет статус перед обработкой EMF, драйвер виртуального принтера, вероятно, будет использовать их в исходном состоянии, поскольку у предварительного преобразователя нет времени на их изменение.

Настройка предварительного преобразователя

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

Пример

Давайте создадим простое консольное приложение предварительного преобразования, которое получает путь к файлу INI через командную строку и решает продолжить процесс преобразования, если «HorizontalResolution» и «VerticalResolution» меньше или равны 300, а размер бумаги меньше или равно 2286 x 3048 в десятках мм (9 x 12 дюймов).

Пример исходного кода и решения Visual Studio 2013 доступны здесь.

[код C ++]

 #include  int wmain (int argc, WCHAR const * argv []) { если (argc! = 2) возврат 1; WCHAR const * pathToIniFile = argv [1]; int horzRes = GetPrivateProfileInt (L «Документ», L «HorizontalResolution», 0, pathToIniFile); int vertRes = GetPrivateProfileInt (L «Документ», L «Вертикальное разрешение», 0, pathToIniFile); int paperWidth = GetPrivateProfileInt (L «Документ», L «Ширина бумаги», 0, pathToIniFile); int paperLength = GetPrivateProfileInt (L «Документ», L «PaperLength», 0, pathToIniFile); if (horzRes> 300 || vertRes> 300 || paperWidth> 2286 || paperLength> 3048) { // пропустить преобразование WritePrivateProfileString (L «Предварительное преобразование», L «Статус», L «Отменено», pathToIniFile); } else { // принимаем преобразование WritePrivateProfileString (L «Предварительное преобразование», L «Статус», L «возобновлено», pathToIniFile); } возврат 0; } 

Мы должны установить настройки предварительного преобразователя для виртуального драйвера принтера.

Чтобы настроить наше приложение в качестве предварительного преобразователя, выполните следующие действия:

  1. Откройте реестр и найдите ключ «HKCU / Software / Two Pilots Demo Printer / Application».
  2. В этом ключе создайте ключ «Preconverter».
  3. Добавьте следующие значения в «Preconverter»:
Имя значения Тип значения Описание
Включено REG_DWORD Включает или отключает предварительный преобразователь.Для включения установите значение «1».
Запускаемый файл REG_SZ Полный путь к приложению предварительного конвертера. Например:
C: \ Program Files \ Two Pilots Demo Printer \ pre-converter.exe
Режим передачи REG_DWORD Способ получения предварительным преобразователем пути к файлу INI.Установите «0» для приема через командную строку.

После этого мы можем использовать наш предварительный преобразователь.

Совет: Если вы хотите скрыть приложение предварительного преобразования, вы должны создать приложение Win32 (не консоль) и изменить основную запись:

[код C ++]

 int APIENTRY wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { int argc = 0; WCHAR ** argv = CommandLineToArgvW (GetCommandLineW (), & argc); // вот тот же код, что и в предыдущей версии приложения предварительного конвертера LocalFree (argv); возврат 0; } 

3.Как создать собственное приложение для пост-конвертера

Post-converter - это приложение, которое виртуальный драйвер принтера вызывает после преобразования файлов EMF.

Создайте свой собственный пост-конвертер, если хотите:

  • Обработка файлов результатов после печати
  • Покажите результат вашему покупателю
  • Получить дополнительную информацию от Пользователя и использовать ее для дальнейшей обработки

Используя приложение пост-конвертера, вы можете обрабатывать файлы результатов по мере необходимости.

Вход пост-преобразователя следующий:

Драйвер виртуального принтера

вызывает пост-конвертер, передавая путь к файлу INI со свойствами задания на печать и путями к файлам результатов. В соответствии с вашими потребностями вы можете настроить драйвер виртуального принтера для отправки пути к файлу INI в пост-преобразователь через командную строку, именованный канал или сообщение WM_COPYDATA.

Как работает пост-конвертер

Virtual Printer Driver получает задание на печать, извлекает файлы EMF, обрабатывает файлы EMF и вызывает пост-конвертер.

INI-файл на этапе пост-конвертации выглядит так:

Файл INI предоставляет пути ко всем файлам EMF, BMP, JPEG, TIFF, PNG, PDF и текстовым файлам в соответствующих разделах.

Настройка постконвертера

Настройте пост-конвертер для виртуального драйвера принтера в соответствии с разделом «Настройки приложения» в документации.

Пример

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

Пример исходного кода и решения Visual Studio 2013 доступны здесь.

[код C ++]

 #include  #include  int wmain (int argc, WCHAR const * argv []) { если (argc! = 2) возврат 1; WCHAR const * pathToIniFile = argv [1]; DWORD count = GetPrivateProfileInt (L «PNG», L «Count», 0, pathToIniFile); если (! количество) возврат 0; size_t const pathSize = 1024; WCHAR путь [pathSize] = {0}; size_t const keySize = 32; Ключ WCHAR [размер ключа] = {0}; for (DWORD i = 0; i  

Мы должны установить настройки пост-конвертера для драйвера виртуального принтера.

Чтобы настроить наше приложение в качестве пост-конвертера, выполните следующие действия:

  1. Откройте реестр и найдите ключ «HKCU / Software / Two Pilots Demo Printer / Application».
  2. В этом ключе создайте ключ «Постконвертер».
  3. Добавьте в «Постконвертер» следующие значения:
Имя значения Тип значения Описание
Включено REG_DWORD Включает или отключает пост-конвертер.Для включения установите значение «1».
Запускаемый файл REG_SZ Полный путь к приложению постконвертера. Например:
C: \ Program Files \ Two Pilots Demo Printer \ post-converter.exe
Режим передачи REG_DWORD Способ получения постконвертером пути к файлу INI.Установите «0» для приема через командную строку.

После этого мы можем использовать наш постконвертер.

Совет: Если вы хотите скрыть свое приложение пост-конвертера, вы должны создать приложение Win32 (не консоль) и изменить основную запись:

[код C ++]

 int APIENTRY wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { int argc = 0; WCHAR ** argv = CommandLineToArgvW (GetCommandLineW (), & argc); // вот тот же код, что и в предыдущей версии приложения постконвертера LocalFree (argv); возврат 0; } 

4.Как создать собственное приложение пост-конвертера, совместимое с режимом раннего доступа

Ранний доступ - это режим виртуального драйвера принтера, который позволяет получать пути к преобразованным файлам в процессе преобразования.

Используйте режим раннего доступа, если хотите:

  • сократить время обработки документов
  • показать результаты пользователю как можно скорее

Вход пост-преобразователя в режиме раннего доступа следующий:

Как работает ранний доступ

Драйвер виртуального принтера получает задание на печать, вызывает путь передачи пост-конвертера к файлу INI со свойствами задания на печать.

Файл INI на этом этапе выглядит так:

INI-файл содержит статус задания на печать в разделе [Документ]. На этом этапе он установлен на «Спулинг».

Для каждой страницы задания на печать, драйвер виртуального принтера:

  • Распаковать файл EMF
  • Обработка файла EMF
  • Передает пути к файлам результатов в пост-конвертер

Пути к файлам результатов упакованы в пакет. В каждом пакете хранится имя устройства, идентификатор задания на печать и пути к файлам результатов с нулем ('\ 0') в качестве разделителя и двойным нулем в конце пакета.

Например, упаковка:

«Демонстрационный принтер Two Pilots \ 017 \ 0c: \ Output \ result.emf \ 0c: \ Output \ result.png \ 0 \ 0»

поступает с устройства «Two Pilots Demo Printer», идентификатор задания - 17, и есть два файла «c: \ Output \ result.emf» и «c: \ Output \ result.png».

В конце преобразования драйвер виртуального принтера передает путь к файлу INI в пост-конвертер. Файл INI на этом этапе выглядит так:

Статус задания на печать в разделе [Документ] установлен на «Напечатано».

Пример

Давайте создадим приложение Win32, которое получает данные через сообщение WM_COPYDATA и показывает файл BMP в программе просмотра по умолчанию.

Пример исходного кода и решения Visual Studio 2013 доступны здесь.

Пример кода

ниже показывает обработку WM_COPYDATA в диалоговой процедуре.

[код C ++]

 BOOL CALLBACK DialogProc (HWND hDlg, сообщение UINT, WPARAM wParam, LPARAM lParam) { switch (Сообщение) { case WM_COPYDATA: { COPYDATASTRUCT * data = (COPYDATASTRUCT *) lParam; // пакет - это массив строк «значение0 \ 0значение1 \ 0значение2 \ 0… \ 0 \ 0» WCHAR const * package = (WCHAR const *) data-> lpData; std :: wstring fileName (пакет); // Получаем расширение fileName std :: size_t index = имя_файла.rfind ('.'); std :: wstring extension = L ""; если (индекс! = std :: string :: npos) extension = fileName.substr (index + 1); if (! _wcsicmp (extension.c_str (), L "ini")) { // Получен INI-файл. // Здесь мы можем получить информацию о задании печати и внести некоторые изменения в настройки VPD } else { // пути к преобразованным файлам, полученным в формате "имя принтера \ 0 id задания \ 0file0 \ 0file1 \ 0… \ 0 \ 0" пакет + = wcslen (пакет) + 1; // пропустить заголовок "имя принтера \ 0" пакет + = wcslen (пакет) + 1; // пропускаем заголовок "id задания \ 0" WCHAR const * ptr = package; while (ptr [0]) { fileName = ptr; // находим расширение fileName index = имя_файла.rfind ('.'); if (index! = std :: string :: npos) { extension = fileName.substr (index + 1); if (! _wcsicmp (extension.c_str (), L "bmp")) {// найден BMP файл images.addImage (имя_файла); updateStatics (hDlg, currentImage, images.getSize (), images.getImage (currentImage) .c_str ()); InvalidateRect (hDlg, NULL, TRUE); возврат 0; } } ptr + = wcslen (ptr) + 1; } } возврат 0; } //… } 

Мы должны установить настройки пост-конвертера для драйвера виртуального принтера.

Чтобы настроить наше приложение в качестве пост-конвертера, выполните следующие действия:

  1. Откройте реестр и найдите ключ «HKCU / Software / Two Pilots Demo Printer / Application».
  2. В этом ключе создайте ключ «Постконвертер».
  3. Добавьте в «Постконвертер» следующие значения:
Имя значения Тип значения Описание
Включено REG_DWORD Включает или отключает пост-конвертер.Для включения установите значение «1».
Запускаемый файл REG_SZ Полный путь к приложению постконвертера. Например:
C: \ Program Files \ Two Pilots Demo Printer \ Early-access.exe.
Режим передачи REG_DWORD Способ получения постконвертером пути к файлу INI.Установите «1» для получения сообщения WM_COPYDATA.
Ранний доступ REG_DWORD Включает или отключает режим раннего доступа. Для включения установите значение «1».
Класс окна REG_SZ Класс окна приложения компонента. Например, ClientAppClass
Заголовок окна REG_SZ Заголовок окна приложения компонента.Например, ClientAppTitle.

После этого мы можем использовать наш пост-конвертер в режиме раннего доступа.

5. Как получить и установить ориентацию бумаги в принтере

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void paperOrientationTest (std :: wstring const & printerName) { // получаем ориентацию бумаги vpd :: PaperOrientation result; vpd :: getPaperOrientation (имя_принтера, результат); если (результат == vpd :: PaperOrientationLandscape) возвращение; // устанавливаем ориентацию бумаги в альбомную vpd :: setPaperOrientation (имя_принтера, vpd :: PaperOrientationLandscape); } 

6.Как создать, добавить, установить, перечислить, получить и удалить бумажную форму для указанного принтера

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void paperFormsTest (std :: wstring const & printerName) { // создаем новую бумажную форму vpd :: PaperForm testForm; wcsncpy_s (testForm.mName, L "тестовая форма", vpd :: PaperForm :: paperFormSize - 1); testForm.mWidth = testForm.mHeight = 1234.0f; // ширина и высота 1234.0 testForm.mMeasure = vpd :: PaperSizeMeasureMetrics; // ширина и высота в метриках testForm.mPrecision = vpd :: PaperSizePrecisionNormal; // ширина и высота с нормальной точностью, т.е. мм или дюймы // добавляем бумажную форму в список форм принтера vpd :: addPaperForm (имя_принтера, testForm); // устанавливаем форму "тестовой формы" для выбранного принтера vpd :: setPaperForm (имя_принтера, testForm); // перечисляем бумажные формы vpd :: AutoReleasePtr  forms (0); std :: size_t size = 0; vpd :: enumPaperForms (имя_принтера, forms.getRef (), размер, vpd :: PaperSizeMeasureMetrics); vpd :: PaperForm form; for (std :: size_t i = 0; i  

7. Как получить, установить и пересчитать лоток для бумаг для указанного принтера

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void paperBinTest (std :: wstring const & printerName) { // подсчитываем лотки для бумаги vpd :: AutoReleasePtr  бины (nullptr); std :: size_t size = 0; int result = vpd :: enumPaperBins (имя_принтера, bins.getRef (), размер); // получаем корзину для бумаги WORD bin = 0; vpd :: getPaperBin (имя_принтера, корзина); если (bin == DMBIN_CASSETTE) возвращение; for (std :: size_t i = 0; i  

8. Как получить, установить и пересчитать разрешения печати для указанного принтера

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void resolutionTest (std :: wstring const & printerName) { // получаем разрешение принтера vpd :: PrintResolution resolution; vpd :: getPrintResolution (имя_принтера, разрешение); если (разрешение.mDpiX <= 300 || разрешение.mDpiY <= 300) возвращение; // перечисляем разрешения принтера vpd :: AutoReleasePtr  разрешения (nullptr); std :: size_t size = 0; vpd :: enumPrintResolutions (имя_принтера, разрешениеs.getRef (), размер); for (std :: size_t i = 0; i  

9.Как пересчитать данные формы бумаги для указанного принтера

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void formInfoTest (std :: wstring const & printerName) { // перечисляем информацию о формах для выбранного принтера vpd :: AutoReleasePtr  forms (nullptr); std :: size_t size = 0; vpd :: enumFormInfo (имя принтера, forms.getRef (), размер); } 

10.Как получить и установить DEVMODE для указанного принтера

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void devmodeTest (std :: wstring const & printerName) { // получить DEVMODE для указанного принтера vpd :: Devmode devmode (vpd :: getDevmode (имя_принтера)); // изменяем DEVMODE devmode-> dmFields | = DM_COPIES | DM_COLLATE | DM_DUPLEX; devmode-> dmCopies = 1; devmode-> dmCollate = DMCOLLATE_FALSE; devmode-> dmDuplex = DMDUP_HORIZONTAL; // устанавливаем DEVMODE vpd :: setDevmode (имя_принтера, режим разработки); } 

11.Как пронумеровать принтеры в системе

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void printerTest (void) { vpd :: AutoReleasePtr  принтеры (nullptr) std :: size_t size = 0; // перечисляем локальные принтеры vpd :: enumPrinters (vpd :: PrinterLocationLocal, printers.getRef (), размер); для (std :: size_t i = 0; i  

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

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void serviceTest (std :: wstring const & serviceName) { // получаем текущее состояние сервиса Состояние DWORD = 0; vpd :: getServiceCurrentState (имя_службы, состояние); switch (состояние) { case SERVICE_STOPPED: // запускаем службу vpd :: startService (имя_службы); перерыв; case SERVICE_RUNNING: // остановить службу vpd :: stopService (имя_службы); перерыв; } // перечисляем службы, которые зависят от выбранной службы vpd :: AutoReleasePtr  services (nullptr); std :: size_t size = 0; vpd :: enumDependentServices (имя_службы, services.getRef (), размер); для (std :: size_t i = 0; i  

13. Как устанавливать, получать и удалять настройки для основных функций драйвера виртуального принтера

Настройки виртуального драйвера принтера, хранящиеся в структурах POD, например, текстовая структура настроек:

[код C ++]

 struct TextSettings { беззнаковый длинный mEnable; / ** <включить или отключить формат файла ТЕКСТ * / беззнаковый длинный mMultipage; / ** <включить или отключить многостраничность * / TextEncoding mEncoding; / ** <кодировка текста * / беззнаковый длинный mWriteBOM; / ** <включение или отключение спецификации в текстовых файлах * / беззнаковое длинное mSingleLineInterval; / ** <установить ширину интервала по оси OY, в котором два слова находятся в одной строке * / беззнаковое длинное mSingleWordInterval; / ** <расстояние между двумя словами, которые должны быть в одном слове * / unsigned long mDebug; / ** <включить или отключить вывод отладки в текстовых файлах * / unsigned long mKeepFormatting; / ** <включить или отключить вывод в текстовом формате * / беззнаковый длинный mDefaultBidirectionalAlgorithm; / ** <использовать двунаправленный алгоритм по умолчанию * / unsigned long mCleanup; / ** <удалить ТЕКСТОВЫЕ файлы после обработки * / }; 

Для каждой структуры VPD SDK API предоставляет методы установки, получения и удаления, например

[код C ++]

 int getTextSettings (TextSettings & settings, unsigned int hive, std :: wstring const & registryKey); int setTextSettings (TextSettings const & settings, unsigned int hive, std :: wstring const & registryKey); int removeTextSettings (unsigned int hive, std :: wstring const & registryKey); 

, где куст - куст реестра, может принимать одно или несколько из следующих значений:

  • REGISTRY_HKLM: используйте куст HKEY_LOCAL_MACHINE;
  • REGISTRY_HKCU: используйте куст HKEY_CURRENT_USER.

, если улей содержит оба улья HKLM и HKCU, то метод get сначала считывает настройки из улья HKCU.

[код C ++]

 беззнаковый int hive = vpd :: REGISTRY_HKCU | vpd :: REGISTRY_HKLM; 

RegistryKey - это корневой ключ для настроек драйвера виртуального принтера в выбранном улье, например «Software \\ Two Pilots Demo Printer» означает «HKCU \ Software \ Two Pilots Demo Printer» или «HKLM \ Software \ Two Pilots Demo» Принтер ».

В этом примере мы используем API VPD SDK, который распространяется как часть пакета Devkit, вы можете скачать его здесь.

[код C ++]

 #include  void textSettingsTest (void) { std :: wstring const textRoot = std :: wstring (L "Программное обеспечение \\ Двухпилотный демонстрационный принтер"); vpd :: TextSettings textSettings = {0}; // получаем настройки текста vpd :: getTextSettings (textSettings, vpd :: REGISTRY_HKCU | vpd :: REGISTRY_HKLM, textRoot); textSettings.mMultipage = 1; textSettings.mSingleLineInterval = 10; textSettings.mDebug = 1; // сохраняем текстовые настройки в HKLM hive vpd :: setTextSettings (textSettings, vpd :: REGISTRY_HKLM, textRoot); // и удалим текстовые настройки из улья HKCU vpd :: removeTextSettings (vpd :: REGISTRY_HKCU, textRoot); } 


На главную Загрузить Цены Часто задаваемые вопросы Руководство Учебные пособия Известные проблемы Новости

.

ruby ​​- Как создать виртуальный принтер и перенаправить файл на сервер приложений

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Смотрите также