Написание ФАЙЛА GPD PCL XL
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
В этом разделе приведены общие сведения о написании ФАЙЛА PCL XL GPD, например о том, какие файлы должны включать GPD-файл, как включить PCL XL в файле GPD и порядок заказов команд PCL XL в потоке PCL XL.
Пакет драйверов Windows (WDK) содержит пример файла PCL XL GPD (p6sample.gpd) в каталоге \src\print\mini\mdw\vector\pcl6. (Этот ресурс может быть недоступен на некоторых языках и странах.)
Файлы для включения
Чтобы написать мини-driver на основе GPD, используйте директиву препроцессора *Include, чтобы указать следующие файлы GPD:
pclxl.gpd — содержит макросы для операторов PCL XL, чтобы можно было писать код GPD, который проще читать и понимать. Например, можно написать =BeginPage вместо <43>.
p6disp.gpd — содержит макросы для строк ресурсов, содержащихся в pcl5eres.dll и pclxl.dll.
p6font.gpd — содержит макросы для шрифтов, содержащихся в pclxl.dll.
pjl.gpd — содержит макросы для команд PJL.
Помимо предыдущих файлов, включите стандартные файлы GPD, stdnames.gpd и ttfsub.gpd.
В следующем примере показано, как эти файлы будут включены в GPD-файл.
*Include: stdnames.gpd
*Include: ttfsub.gpd
*Include: pclxl.gpd
*Include: p6disp.gpd
*Include: p6font.gpd
*Include: pjl.gpd
Включение поддержки PCL XL в файле GPD
Чтобы включить поддержку вектора PCL XL, необходимо задать только атрибут *Personality. Это делается следующим образом:
*Personality: = PERSONALITY_PCLXL
Константа PERSONALITY_PCLXL определена в stdnames.gpd.
Пример файла GPD, p6sample.gpd, включен в WDK, чтобы помочь разработчикам создавать мини-накопители PCL XL.
Упорядочение команд PCL XL
Порядок команд более важен в PCL XL, чем в PCL-5. Небольшая ошибка в потоке PCL не может повлиять на задание, но команды PCL XL допустимы только в определенных точках потока, поэтому любая ошибка в PCL XL (PCL-6) приводит к возникновению страницы ошибок XL. Например, невозможно отправить оператор BeginPage перед отправкой оператора BeginSession.
Поток PCL XL имеет форму, аналогичную следующей. (Показанная отступа используется только для подчеркивания точки, в которую эти операторы входят в пары.)
PJL commands
BeginSession
OpenDataSource
BeginPage
<page data>
EndPage
CloseDataSource
EndSession
PJL commands
Поток PCL XL предшествует командам PJL. Поток PCL XL начинается с оператора BeginSession и заканчивается оператором EndSession. В этой паре операторов существует еще одна пара операторов: OpenDataSource и CloseDataSource. В этой паре операторов приходит одна или несколько пар операторов BeginPage/EndPage, одна пара для каждой страницы, отправляемой на принтер. Данные страницы, описывающие, как отрисовывается отдельная страница, закоблена парой операторов BeginPage/EndPage.
Подробные сведения обо всех операторах PCL XL см . в документации по классу протокола 2.0 .
Дополнительные сведения о ФАЙЛАх GPD PCL XL
В ФАЙЛАх XL GPD PCL имя атрибута *FontFormat, указывающее способ загрузки шрифтов, ограничено двумя значениями: HPPCL_OUTLINE и HPPCL_RES. Первое значение указывает, что Unidrv — скачать данные структуры TrueType. Второе значение указывает, что Unidrv — скачать данные мягкого шрифта растрового изображения.
IHV может уменьшить использование памяти принтера, ограничив количество загруженных шрифтов или ограничив количество символов, которые нужно скачать в заданном шрифте. Имена атрибутов *MinFontID и *MaxFontID используются для информирования Unidrv для скачивания мягких шрифтов, идентификаторы которых находятся в пределах диапазона, заданного этими значениями. Аналогичным образом имена атрибутов *MinGlyphID и *MaxGlyphID используются для ограничения количества глифов в заданном шрифте для скачивания в определенный диапазон.
Unidrv работает в соответствии с предположением, что каждый файл GPD содержит собственную матрицу дизера. Кроме того, рекомендуется использовать собственную матрицу дизера для каждого устройства. Матрица дизера указана в параметре *Feature: Dither настраиваемой функции.