WolCub Printer Driver

Tagged:

WolCub - это виртуальный драйвер принтера для печати в графический WOL формат, который используют электронные книги lBook. Основными особенностями данного драйвера является поддержка Windows Vista, разбиение страниц для альбомного просмотра и поддержка anti-aliasing.

Зачем?

Несмотря на то, что уже написано как минимум два виртуальных драйвера принтера для WOL формата, пришлось потратить время на написание третьего по следующим причинам:

  1. Существующие драйвера не поддерживают Windows Vista/x64.
  2. Насколько я понял, в существующих драйверах не существует возможности нарезать страницы для альбомного просмотра, равно как и просто отсутствует поддержка альбомной печати.
  3. Неполная поддержка anti-aliasing.

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

Disclaimer: драйвер написан чуть больше чем за два дня (при том, что до этого с разработкой драйверов под Windows я не сталкивался вообще) со всеми вытекающими последствиями. Ни о каком production quality речи и быть не может, если он у вас вообще установится, а тем более - будет правильно работать и при этом ничего не поломает - можете считать, что вам крупно повезло

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

Где взять?

Последняя версия - 1.3.2.1, бинарник и исходники. Лицензия - GPL.

Изменения в версии 1.3.2.1:

  1. Добавлено несколько новых размеров бумаги для split-режима с бОльшей высотой - для тех случаев, когда содержимое страницы узкое, но высокое, например в результате подрезки боковых полей.
  2. Добавлена обрезка верхних/нижних белых полей на страницах, которые печатаются в режиме split.
  3. Подкорректирован .GPD файл, в результате исчезла ошибка с установкой на XP/x86 и сообщение “драйвер не установлен” на Vista/x64.
  4. Исправлена ошибка с выводом последней неполной страницы в режиме split, теперь текст выводится вверху страницы, а не внизу.

Предыдущая версия - 1.3.0.3, бинарник и исходники.

Возможности драйвера

Поддерживаемые версии Windows

Теоретически должны поддерживаться Vista/x64, Vista/x86, XP/x64, XP/x86. На практике работоспособность протестирована на Vista/x64 и XP/x86. За работоспособность на Vista/x86 и XP/x64 ручаться не могу, но не вижу причин, почему бы ему там не работать, раз работает на “крайних” значениях диапазона

В принципе, драйвер подписыван, но поскольку “правильного” сертификата у меня нет, а подпись сделана self-signed certificate - это бестолку, при установке Windows все равно будет ругаться на отсутствие подписи, поэтому с подписями я тоже особо не разбирался и не уверен, что они вообще делаются правильно.

1- и 8-битовый вывод

С интерфейсной стороны поддерживается монохромная и 256-уровневая серая печать. Оба варианта преобразуются в 4-уровневый серый на выходе.

Альбомная печать

Используйте только размер страницы lBook V3, зачем нужены размеры lBook V3 Split - см. следущий пункт.

Нарезка страницы для альбомной печати

Данная возможность предназначена для тех случаев, когда приложение не в состоянии самостоятельно переразбить текст с учетом альбомной ориентации, типичный пример - Adobe Acrobat. В этом случае печать делается с обычной ориентацией страницы, но размером бумаги lBook V3 Split, ширина которой равна высоте экрана lBook’а. Драйвер, получая эти страницы, разрезает их под альбомную ориентацию с высотой страницы равной ширине экрана lBook’а, таким образом по сути реализуя режим альбомной печати.

Выбор размера бумаги Split: выбирайте наименьший по высоте из Split размеров страницы, который в состоянии вместить одну полную страницу, которое выводит ваше приложение. При выборе меньшего размера страница как правило будет либо отмасштабирована программой (т.о. внося дополнительные белые поля по бокам), либо обрезана по высоте (что тоже обычно не является желательным), выбор слишком большого размера не должен приводить к каким-либо последствиям кроме бОльшего времени на обработку страницы.

Anti-aliasing

Для anti-aliasing’а вывода предусмотрена поддержка более высоких разрешений, чем у экрана lBook (166 DPI), а именно 332 DPI, 664 DPI и 1328 DPI. При печати в этих разрешениях драйвер уменьшает страницу до разрешения 166 DPI, при этом резкие границы сглаживаются путем добавления промежуточных цветов, что хорошо заметно на черно-белом тексте.

Dithering

Как при получении 256-уровневого входа, так и после отработки anti-aliasing’а необходимо преобразование в 4-уровневый серый. Для получения визуально более приятного результата используется dithering.

Отсутствующие возможности

  1. Нет UI для задания заголовка книги и cover image, когда появится и появится ли вообще - неизвестно, см. Disclaimer.

Установка

Внимательно читаем Disclaimer. Осознаем. Перечитываем еще раз. Бекапим все важные данные с системы. Устанавливаем как обычный локальный принтер, порт - FILE.

Использование

Если программа, из которой осуществляется печать, поддерживает печать “as image” - как правило, это будет наиболее оптимальный вариант, так как тогда анти-алиасингом будет заморачиваться сама программа, а не драйвер, что обычно дает лучший результат. В этом случае не имеет смысла ставить разрешение выше 166 DPI. Цветность ставить в 256 уровней, иначе потеряется весь смысл печати “as image”.

В остальных случаях рекомендуется печатать в максимальном разрешении, в котором хватает терпения дождаться результата Цветность - по обстоятельствам, если выводится только текст - то можно ставить и монохромную, но особого смысла нет - внутри драйвера картинка все равно будет первым делом преобразована в 256-уровневую, единственное что - сэкономите немного памяти во время спулинга.

Альбомная печать: если программа умеет сама печатать в альбомной ориентации - ставим размер бумаги lBook V3 и ориентацию “альбомная”, если нет - то размер бумаги lBook V3 Split и ориентация “книжная”. Комбинация lBook V3 Split/альбомная бессмысленна и, скорее всего, приведет к невозможности открыть результирующий файл на lBook’е.

Компиляция

Нужен WinDDK - я тестировал на версии 1.0.6000.0

Установить environment для DDK (setenv.bat в DDK\bin) и запустить build.bat. Для подписи использовать sign.bat, предварительно сгенерировав сертификат с помощью MakeCert, хотя если у вас нет “настоящего” сертификата, то особого смысла в подписывании нет, см. выше.

Библиотеки

Используются библиотеки crengine для поддержки WOL формата и ImageMagick для операций с изображениями. Обе библиотеки пропатчены для нормальной сборки под WDK 1.0.6000.0 в x86/x64 режимах и вкомпиливаются в драйвер статически, включены в архив с исходниками.

Ошибки

… однозначно есть. Патчи к исходникам, исправляющие ошибки - принимаются с благодарностью, все остальное - по настроению, читаем в очередной раз Disclaimer. Но все равно, на всякий случай отписавайтесь в комментах к этой записи, если будет время/возможность - попробую посмотреть …

Syndicate content