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


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

OpenXPS — это формат спецификации документа Open XML для документов, основанный на стандартной спецификации Европейской ассоциации производителей компьютеров (ECMA).

Windows 8 обеспечивает полную поддержку печати OpenXPS с помощью модели драйвера печати версии 4, а также постоянную поддержку формата Microsoft XPS. В этом разделе основное внимание уделяется той части этой поддержки, которая относится к разработчикам приложений Windows. Сведения о требованиях к драйверам для поддержки OpenXPS см. в разделе Поддержка драйверов для OpenXPS.

Отправка данных XPS в систему печати

Для отправки всех заданий печати XPS в систему печати рекомендуется использовать IPrintDocumentPackageTarget . IPrintDocumentPackageTarget принимает объектную модель XPS (OM) без сериализации, что помогает повысить общую производительность.

Ниже приведен краткий обзор интерфейса IPrintDocumentPackageTarget :

  • Этот интерфейс поддерживает печать из специализированных решений, а также классических приложений.

  • Для классических приложений его можно использовать вместо StartXpsPrintJob1.

  • Доступно в Windows 7 с пакетом обновления 1 (SP1) и обновлением платформы и Windows 8.

  • Включите DocumentTarget.h в проекты для использования этих API.

Приложения, использующие документы OpenXPS, должны иметь в виду, что тип MIME для OpenXPS выглядит следующим образом:

application\\oxps

Отправка данных OpenXPS в API печати XPS

В особенности Для OpenXPS OM XPS принимает как MSXPS, так и OpenXPS, а также предоставляет методы преобразования и сериализации в любой из форматов. Это позволяет разработчикам приложений быть не зависящими от целевого драйвера, если они хотят. Это также означает, что разработчики приложений всегда могут отправлять задания печати как XPS OM в StartXpsPrintJob1 или IDocumentPackageTarget, зная, что система печати будет обрабатывать все необходимые преобразования.

Конечно, предотвращение преобразования между форматами XPS повысит сквозную производительность. В приложении разработчик может проверка следующий раздел реестра, чтобы определить предпочтительный формат XPS целевого драйвера печати:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\[PrintDriverName]\PrintDriverData\XpsFormat

После определения предпочтительного формата XPS приложение может предоставить объекты OM XPS, которые не требуют преобразования. Особое внимание следует отметить использование HD Photo в MSXPS и JPEGXR в OpenXPS. Преобразование из JPEGXR в HD Photo является относительно легким, так как основное различие в этом преобразовании заключается в том, что HD Photo игнорирует 4 контрольных бита, необходимых JPEGXR. Однако для преобразования из hd Photo в JPEGXR требуется повторное кодирование всего изображения для создания необходимых битов элемента управления. Таким образом, предоставление изображений JPEGXR для изображений с высоким разрешением обеспечит совместимость с OpenXPS и минимизирует стоимость преобразования изображения для MSXPS.

Заголовок Xpsobjectmodel_1.h определяет дополнительные API и объекты для OpenXPS. Интерфейс IXpsOMObjectFactory1 предоставляет дополнительные методы преобразования изображений. Ниже приведен синтаксис.

IXpsOMObjectFactory1->ConvertHDPhotoToJpegXR(IXpsOMImageResource *imageResource);

IXpsOMObjectFactory1->ConvertJpegXRToHDPhoto(IXpsOMImageResource *imageResource);

Windows 8 предоставляет следующие новые и обновленные перечисления.

Новое перечисление:

XPS_DOCUMENT_TYPE

Обновленное перечисление

XPS_IMAGE_TYPE

Новые методы GetDocumentType позволяют приложению определять формат XPS документов. Они доступны в IXpsOMObjectFactory1, IXpsOMPackage1 и IXpsOMPage1. Ниже приведен список методов.

IXpsOMObjectFactory1::GetDocumentTypeFromFile
IXpsOMObjectFactory1::GetDocumentTypeFromStream
IXpsOMPackage1::GetDocumentType
IXpsOMPage1::GetDocumentType

Windows 8 предоставляет следующие новые коды ошибок для поддержки OpenXPS:

XPS\_E\_MISMATCHED\_NAMESPACE.
Эта ошибка возвращается, если имеется несовпадение пространства имен.
XPS\_E\_ABSOLUTE\_REFERENCE.
Эта ошибка возвращается, если MSXPS использует абсолютные URI во внутренних ссылках или пытается использовать внутренние ссылки для сериализации в потоке. Это связано с тем, что OM XPS создает относительные URI. Хотя MSXPS поддерживает как относительные, так и абсолютные URI, OpenXPS требует относительные URI.

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

IPrintDocumentPackageTarget

IXpsOMObjectFactory1::GetDocumentTypeFromFile

IXpsOMObjectFactory1::GetDocumentTypeFromStream

IXpsOMPackage1::GetDocumentType

IXpsOMPage1::GetDocumentType

XPS_DOCUMENT_TYPE

XPS_IMAGE_TYPE