Поделиться через


Поддержка драйверов для OpenXPS

Важно!

Для настройки печати в Windows 10 и 11 для разработки принтеров рекомендуется использовать драйвер класса "Входящие" от Майкрософт, а также приложения поддержки печати (PSA).

Дополнительные сведения см. в руководстве по проектированию приложений поддержки печати.

OpenXPS — это формат спецификации бумаги Open XML для документов, основанный на стандартной спецификации Ecma International.

Самые актуальные сведения об этой спецификации см. в статье Open XML Paper Specification.

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 непосредственно в очередь очереди (в обход API печати XPS) не поддерживается. Это приведет к следующим проблемам с функциональными возможностями:

  • Файлы очереди XPS, отправляемые непосредственно в очередь, будут рассматриваться как MSXPS и обрабатываться соответствующим образом.

  • Результаты отправки файла OpenXPS непосредственно в очередь не определены и, скорее всего, вызовут сбой задания печати.

Примечание Поддержка этого сценария не планируется.

Не рекомендуется. Отправка потока OpenXPS из приложения непосредственно в API печати XPS не рекомендуется. Например, не отправляйте поток OpenXPS непосредственно в метод StartXPSPrintJob. В этом случае результирующее преобразование из одного варианта XPS в другой в виде потока может быть очень затратным для производительности.

Вместо этого следует использовать IPrintDocumentPackageTarget для отправки задания печати в качестве модели XPS, чтобы избежать снижения производительности.

Не рекомендуется: отправка файла очереди XPS непосредственно в диспетчер очереди печати. Если это сделать, система печати не найдет необходимые метаданные, добавленные API пути печати, предположим, что формат msXPS, и попытается преобразовать их в OpenXPS. Если файл очереди, отправленный непосредственно в очередь, был файлом в формате OpenXPS, попытка конвейера фильтра печати преобразовать его в OpenXPS будет иметь неопределенные результаты. Если файл, отправленный в очередь, был файлом в формате MSXPS, а драйвером является драйвер только OpenXPS, преобразование конвейера фильтра печати в OpenXPS будет успешным. Однако такое преобразование на позднем этапе приведет к значительной потере производительности системы печати.

Влияние на разработчиков приложений

Сведения о влиянии на разработчиков приложений в отношении поддержки OpenXPS в Windows 8 см. в разделе Поддержка приложений для печати 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 и преобразует задание в файл очереди XPS. Формат файла очереди будет соответствовать предпочтительному формату XPS, указанному в разделе DriverRender манифеста.

  • Преобразование формата API печати XPS

    API печати XPS будет запрашивать поддерживаемые форматы XPS для целевого драйвера. Если драйвер поддерживает оба формата, API печати XPS передает задание печати XPS в очередь очереди печати как отправлено приложением. Преобразование не выполняется.

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

    Если xpsFormat не указан в манифесте, по умолчанию будет использоваться только MSXPS. Входные данные OpenXPS будут преобразованы в MSXPS. Это обеспечивает самую надежную обратную совместимость драйверов.

  • ФАЙЛЫ XPS, отправляемые непосредственно в диспетчер очереди печати

    XPS-файлы, отправляемые непосредственно в диспетчер очереди печати, по умолчанию являются MSXPS. Отправка OpenXPS напрямую в очередь очереди не поддерживается. Однако .NET до 4.5 и более поздних версий сериализовал собственный MSXPS и отправил задание непосредственно в очередь очереди. Это поведение было реализовано до появления API печати XPS (xpsprint.dll).

    Чтобы обеспечить обратную совместимость для этих приложений .NET, диспетчер конвейера фильтра печати проверка файл очереди, чтобы определить, был ли он получен напрямую в очередь. Если это так, предполагается, что это 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.

Поддержка приложений для печати OpenXPS

OpenXPS

Манифест драйвера версии 4