Поддержка драйверов для OpenXPS
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
OpenXPS — это формат спецификации Open XML Paper для документов, и он основан на спецификации Ecma International standard.
Последние сведения об этой спецификации см. в спецификации Open XML Paper.
Windows 8 обеспечивает полную поддержку OpenXPS параллельно с поддержкой существующего формата Microsoft XPS. В этом разделе рассматривается поддержка OpenXPS с помощью модели драйвера версии 4. Сведения о поддержке OpenXPS, относящуюся к разработчикам приложений Windows, см. в разделе "Поддержка приложений для печати OpenXPS".
Поддерживаемые сценарии OpenXPS
Путь печати Windows разработан для обеспечения соответствия формату отправленного XPS поддерживаемого формата целевого драйвера печати и при необходимости преобразует форматы. Windows также предоставляет API-интерфейсы для запроса драйвера печати, чтобы приложение может предоставить совместимые элементы и избежать дополнительного преобразования в системе печати.
Драйвер печати может использовать его манифест, чтобы указать, поддерживает ли он Microsoft XPS, Open XPS или оба формата. Microsoft XPS или OpenXPS можно представить фильтрам в конвейере фильтра печати, используя существующие интерфейсы потока и объектной модели (OM) — для поддержки OpenXPS не требуются новые интерфейсы. Формат, представленный фильтрам, зависит от формата, поддерживаемого драйвером, или формата, предоставленного приложением.
Модуль записи документов Microsoft XPS (MXDW) обновлен, чтобы разрешить MXDW выводить Microsoft XPS или OpenXPS из любого классического приложения Windows. Аналогичным образом средство просмотра Microsoft XPS и приложение читателя в Windows 8 могут открывать оба формата XPS. При необходимости пользователи могут печатать данные из средства просмотра XPS в MXDW, чтобы преобразовать форматы.
Неподдерживаемые сценарии OpenXPS
Некоторые устаревшие функции либо не поддерживаются, либо предоставляют более раннюю версию при использовании с OpenXPS.
Неподдерживаемый: отправка файлов OpenXPS непосредственно в spooler (обход API печати XPS) — это неподдерживаемый сценарий. При этом будут возникать следующие проблемы с функциональными возможностями:
Файлы spol XPS, отправленные непосредственно в spooler, будут обрабатываться как MSXPS и обрабатываются соответствующим образом.
Результаты отправки файла OpenXPS непосредственно в spooler не определены и, скорее всего, приведет к сбою задания печати.
Обратите внимание , что нет планов обеспечить поддержку этого сценария.
Не рекомендуется: отправка потока OpenXPS из приложения непосредственно в API печати XPS не рекомендуется. Например, не отправляйте поток OpenXPS непосредственно в метод StartXPSPrintJob. При этом результирующее преобразование из одного варианта XPS в другой в качестве потока может быть очень дорогостоящим для производительности.
Вместо этого следует использовать IPrintDocumentPackageTarget для отправки задания печати в качестве OM XPS, чтобы избежать снижения производительности.
Не рекомендуется: отправка ppool-файла XPS непосредственно в spooler. Если это сделать, система печати не найдет необходимые метаданные, добавленные API пути печати, предположим, что формат MSXPS и попытается преобразовать его в OpenXPS. Если файл spool, отправленный непосредственно в spooler, был файлом с форматированием OpenXPS, попытка конвейера фильтра печати преобразовать его в OpenXPS будет иметь неопределенные результаты. Если файл, отправленный в spooler, был файлом, отформатированным MSXPS, и драйвер является драйвером только OpenXPS, преобразование конвейером фильтра печати в OpenXPS будет успешно выполнено. Но это последнее преобразование стадии приведет к значительной потере производительности системы печати.
Влияние на разработчиков приложений
Сведения о влиянии на разработчиков приложений в отношении поддержки Windows 8 OpenXPS см. в разделе "Поддержка приложений для печати OpenXPS".
Влияние на разработчиков драйверов
Ниже приведены основные шаги по включению OpenXPS в драйвере печати версии 4.
Манифест драйвера: добавьте "OpenXPS" в раздел "Отрисовка драйвера".
Манифест драйвера: добавьте "oxps" в раздел FileSave, если применимо.
Конвейер фильтра: обновите фильтры печати для обработки элементов OpenXPS.
Для данного потока и с соответствующими интерфейсами объектов клиент может использовать формат OpenXPS для передачи данных в фильтры в конвейере фильтра печати. Для передачи потока данных клиент использует интерфейсы IID_IPrintReadStream и IID_IPrintWriteStream. Для передачи данных в компонент OM клиент использует интерфейсы IID_IXpsDocumentProvider и IID_IXpsDocumentConsumer. Драйверы, объявляющие поддержку OpenXPS, должны убедиться, что предоставленные фильтры печати могут правильно обрабатывать формат OpenXPS при получении этого формата от диспетчера конвейеров.
Манифест драйвера: раздел DriverRender. Во время установки драйвера процесс установки проверяет раздел DriverRender манифеста, чтобы узнать, включает ли запись XpsFormat OpenXPS. Запись XpsFormat может включать как XPS (для Microsoft XPS), так и OpenXPS, чтобы указать двойную поддержку. Порядок, в котором перечислены два формата в записи XpsFormat, определяет предпочтительный формат драйвера.
Ниже приведены некоторые примеры обновления раздела DriverRender.
Указывает только поддержку OpenXPS:
[DriverRender]
XpsFormat = OpenXPS
Указывает только поддержку MSXPS:
[DriverRender]
XpsFormat = XPS
Указывает на поддержку обоих форматов с предпочтением OpenXPS:
[DriverRender]
XpsFormat = OpenXPS,XPS
Указывает на поддержку обоих форматов с предпочтением MSXPS:
[DriverRender]
XpsFormat = XPS,OpenXPS
Разработчик драйверов определяет предпочтительный формат для драйвера печати версии 4, и это решение основано на функциональных возможностях, предоставляемых драйвером. Например, драйвер печати можно разработать для обеспечения поддержки JPEG XR для изображений с высокой точностью.
Система печати принимает различные решения на основе сведений DriverRender в манифесте. Ниже приведены некоторые примеры этих решений:
Задания печати на основе GDI, отправленные драйверам версии 4
Microsoft XPS Document Converter (MXDC) принимает входные данные задания печати GDI и преобразует задание в файл spool XPS. Формат этого файла спула будет соответствовать предпочтительному формату XPS, обозначенном в разделе DriverRender манифеста.
Преобразование формата API печати XPS
API печати XPS запрашивает поддерживаемые форматы XPS для целевого драйвера. Если драйвер поддерживает оба формата, API печати XPS передает задание печати XPS в spooler AS SUBMITTED приложением. Преобразование не будет выполнено.
Если целевой драйвер поддерживает только один или другой формат, задание будет преобразовано в правильный формат перед повтором.
Если в манифесте нет xpsFormat, поведение по умолчанию будет использоваться только для MSXPS. Входные данные OpenXPS преобразуются в MSXPS. Это поведение обеспечивает самую сильную обратную совместимость драйверов.
ФАЙЛЫ XPS, отправленные непосредственно в spooler
ФАЙЛЫ XPS, отправленные непосредственно в spooler, по умолчанию — MSXPS. Отправка openXPS прямо в spooler не поддерживается. Однако .NET до 4.5+ сериализовал собственный MSXPS и отправил задание непосредственно в spooler. Это поведение было реализовано до внедрения API печати XPS (xpsprint.dll).
Чтобы обеспечить обратную совместимость для этих приложений .NET, диспетчер конвейера фильтров печати проверяет файл спула, чтобы определить, был ли он получен прямой в spooler. Если да, предполагается, что это MSXPS. Диспетчер конвейера фильтров печати запрашивает форматы XPS драйвера на этом этапе. Если драйвер поддерживает MSXPS, преобразование не будет выполнено. Если драйвер поддерживает только OpenXPS, диспетчер конвейера фильтров печати выполнит преобразование файла. Преобразование на этом этапе задания является дорогостоящим; однако это гарантирует, что устаревшие приложения .NET смогут распечатать новые драйверы OpenXPS версии 4.
Манифест драйвера: раздел FileSave. Раздел FileSave манифеста драйвера печати версии 4 предоставляет расширения для диалогового окна сохранения файлов, используемого портом PORTPROMPT. (PORTPROMPT: следует использовать вместо FILE: в Windows 8.1, так как PORTPROMPT: позволит пользователям получать доступ ко всем расположениям файлов, к которым они имеют права, даже если приложение работает в режиме с низким уровнем прав.) Записи в разделе FileSave связаны с записями в разделе DriverRender по индексу.
Пример:
[FileSave]
xps=0
oxps=0
[DriverRender]
XpsFormat=XPS,OpenXPS
Это гарантирует, что когда пользователь отправляет задание печати этому драйверу, а порт имеет значение PORTPROMPT:, диалоговое окно сохранения файлов будет отображать XPS и OpenXPS в качестве параметров типа файла в диалоговом окне, а также применить .xps или .oxps соответственно в качестве расширения файла.
Дополнительные сведения о других параметрах раздела "Сохранение файлов" манифеста см . в манифесте драйвера версии 4.