다음을 통해 공유


OpenXPS에 대한 드라이버 지원

중요

인쇄 지원 앱(PSA)과 함께 Microsoft의 IPP 받은 편지함 클래스 드라이버를 사용하여 프린터 장치 개발을 위해 Windows 10 및 11의 인쇄 환경을 사용자 지정하는 것이 좋습니다.

자세한 내용은 인쇄 지원 앱 디자인 가이드를 참조하세요.

OpenXPS는 문서의 Open XML Paper Specification 형식이며 Ecma International 표준 사양을 기반으로 합니다.

이 사양에 대한 최신 정보는 Open XML Paper Specification을 참조하세요.

Windows 8은 기존 Microsoft XPS 형식에 대한 지속적인 지원과 함께 OpenXPS를 완전히 지원합니다. 이 항목에서는 v4 드라이버 모델을 통한 OpenXPS 지원에 중점을 둡니다. Windows 애플리케이션 개발자와 관련된 OpenXPS 지원은 OpenXPS 인쇄에 대한 앱 지원을 참조하세요.

지원되는 OpenXPS 시나리오

제출된 XPS 형식이 대상 인쇄 드라이버의 지원되는 형식과 일치하고 필요에 따라 형식을 변환하도록 Windows 인쇄 경로가 개발되었습니다. 또한 Windows는 애플리케이션이 호환되는 요소를 제공하고 인쇄 시스템 내에서 추가 변환을 방지할 수 있도록 인쇄 드라이버를 쿼리하는 API를 제공합니다.

인쇄 드라이버는 매니페스트를 사용하여 Microsoft XPS, Open XPS 또는 두 형식을 모두 지원하는지 여부를 나타낼 수 있습니다. Microsoft XPS 또는 OpenXPS는 기존 OM(스트림 및 개체 모델) 인터페이스를 사용하여 인쇄 필터 파이프라인의 필터에 표시할 수 있습니다. 드라이버에서 OpenXPS를 지원하기 위해 새 인터페이스가 필요하지 않습니다. 필터에 표시되는 형식은 드라이버에서 지원하는 형식 또는 애플리케이션에서 제공하는 형식에 따라 달라집니다.

MXDW(Microsoft XPS 문서 작성기)가 업데이트되어 MXDW가 모든 Windows 데스크톱 애플리케이션에서 Microsoft XPS 또는 OpenXPS를 출력할 수 있습니다. 마찬가지로 Microsoft XPS 뷰어와 Windows 8의 Reader 앱은 두 XPS 형식을 모두 열 수 있습니다. 필요한 경우 사용자가 서식을 변환하기 위해 XPS 뷰어에서 MXDW로 인쇄할 수 있습니다.

지원되지 않는 OpenXPS 시나리오

일부 레거시 기능은 지원되지 않거나 OpenXPS와 함께 사용할 때 다운그레이드된 환경을 제공합니다.

지원되지 않음: OpenXPS 파일을 스풀러에 직접 보내기(XPS 인쇄 API 무시)는 지원되지 않는 시나리오입니다. 이렇게 하면 다음과 같은 기능 문제가 발생합니다.

  • 스풀러로 직접 전송된 XPS 스풀 파일은 MSXPS로 처리되고 그에 따라 처리됩니다.

  • OpenXPS 파일을 스풀러에 직접 보내는 결과는 정의되지 않으며 인쇄 작업이 실패할 수 있습니다.

참고 이 시나리오에 대한 지원을 제공할 계획은 없습니다.

권장되지 않음: 애플리케이션에서 XPS 인쇄 API로 직접 OpenXPS 스트림을 보내는 것은 권장되지 않습니다. 예를 들어 OpenXPS 스트림을 StartXPSPrintJob 메서드로 직접 보내지 마세요. 이렇게 하면 XPS의 한 버전에서 스트림으로 다른 버전으로 변환하는 경우 성능에 매우 비용이 많이 들 수 있습니다.

대신 IPrintDocumentPackageTarget을 사용하여 성능 저하를 방지하기 위해 인쇄 작업을 XPS OM으로 제출해야 합니다.

권장되지 않음: XPS 스풀 파일을 스풀러에 직접 보냅니다. 이렇게 하면 인쇄 시스템에서 인쇄 경로 API에서 추가한 필수 메타데이터를 찾을 수 없으며, 형식이 MSXPS라고 가정하고 OpenXPS로 변환하려고 시도합니다. 스풀러로 직접 전송된 스풀 파일이 OpenXPS 형식의 파일인 경우 인쇄 필터 파이프라인이 이를 OpenXPS로 '변환'하려는 시도는 정의되지 않은 결과를 갖게 됩니다. 스풀러로 전송된 파일이 MSXPS 형식의 파일이고 드라이버가 OpenXPS 전용 드라이버인 경우 인쇄 필터 파이프라인에서 OpenXPS로 변환하는 데 성공합니다. 그러나 이러한 후반 단계 변환은 인쇄 시스템 성능에 상당한 손실을 초래합니다.

앱 개발자에게 미치는 영향

OpenXPS에 대한 Windows 8 지원과 관련하여 앱 개발자에게 미치는 영향에 대한 자세한 내용은 OpenXPS 인쇄에 대한 앱 지원을 참조하세요.

드라이버 개발자에게 미치는 영향

다음은 v4 인쇄 드라이버에서 OpenXPS를 사용하도록 설정하기 위한 기본 단계입니다.

  • 드라이버 매니페스트: 드라이버 렌더링 섹션에 "OpenXPS"를 추가합니다.

  • 드라이버 매니페스트: 해당하는 경우 FileSave 섹션에 "oxps"를 추가합니다.

  • 필터 파이프라인: 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

드라이버 개발자는 V4 인쇄 드라이버의 기본 설정 형식을 결정하며, 이 결정은 드라이버가 제공하도록 설계된 기능을 기반으로 합니다. 예를 들어 고품질 이미지에 JPEG XR 지원을 제공하기 위해 인쇄 드라이버를 개발할 수 있습니다.

인쇄 시스템은 매니페스트의 DriverRender 정보를 기반으로 다양한 결정을 내합니다. 이러한 결정의 몇 가지 예는 다음과 같습니다.

  • v4 드라이버로 전송된 GDI 기반 인쇄 작업

    MXDC(Microsoft XPS 문서 변환기)는 GDI 인쇄 작업 입력을 받아 작업을 XPS 스풀 파일로 변환합니다. 해당 스풀 파일의 형식은 매니페스트의 DriverRender 섹션에 표시된 기본 XPS 형식과 일치합니다.

  • XPS 인쇄 API 형식 변환

    XPS 인쇄 API는 대상 드라이버에 대해 지원되는 XPS 형식을 쿼리합니다. 드라이버가 두 형식을 모두 지원하는 경우 XPS 인쇄 API는 애플리케이션에서 제출한 스풀러 AS에 XPS 인쇄 작업을 전달합니다. 변환은 수행되지 않습니다.

    대상 드라이버가 하나 또는 다른 형식만 지원하는 경우 작업은 스풀링하기 전에 올바른 형식으로 변환됩니다.

    매니페스트에 XpsFormat이 제공되지 않으면 동작은 기본적으로 MSXPS로만 설정됩니다. OpenXPS 입력은 MSXPS로 변환됩니다. 이 동작은 드라이버에 대해 가장 강력한 이전 버전과의 호환성을 제공합니다.

  • 스풀러로 직접 전송된 XPS 파일

    스풀러로 직접 전송되는 XPS 파일은 기본적으로 MSXPS입니다. 스풀러에 OpenXPS를 직접 제출하는 것은 지원되지 않습니다. 그러나 4.5 이상 이전의 .NET은 자체 MSXPS를 직렬화하고 작업을 스풀러에 직접 제출했습니다. 이 동작은 XPS 인쇄 API(xpsprint.dll)가 도입되기 전에 구현되었습니다.

    이러한 .NET 애플리케이션에 대한 이전 버전과의 호환성을 제공하기 위해 인쇄 필터 파이프라인 관리자는 스풀 파일을 검사 스풀 파일이 직접 스풀러로 수신되었는지 확인합니다. 그렇다면 MSXPS로 간주됩니다. 인쇄 필터 파이프라인 관리자는 해당 시점에서 드라이버의 XPS 형식을 쿼리합니다. 드라이버가 MSXPS를 지원하는 경우 변환이 수행되지 않습니다. 드라이버가 OpenXPS만 지원하는 경우 인쇄 필터 파이프라인 관리자는 파일 변환을 수행합니다. 작업의 이 시점에서 변환은 성능에 비용이 많이 듭니다. 그러나 레거시 .NET 앱이 새 v4 OpenXPS 드라이버에 인쇄할 수 있도록 합니다.

드라이버 매니페스트: FileSave 섹션. v4 인쇄 드라이버 매니페스트의 FileSave 섹션에서는 PORTPROMPT: 포트에서 사용하는 파일 저장 대화 상자에 대한 확장을 제공합니다. (PORTPROMPT: FILE 대신 사용해야 합니다. Windows 8.1 PORTPROMPT: 애플리케이션이 낮은 권한 모드로 실행되는 경우에도 사용자가 권한이 있는 모든 파일 위치에 액세스할 수 있기 때문입니다.) FileSave 섹션의 항목은 인덱스별로 DriverRender 섹션의 항목과 연결됩니다.

예제:

[FileSave]
xps=0
oxps=0

[DriverRender]
XpsFormat=XPS,OpenXPS

이렇게 하면 사용자가 이 드라이버에 인쇄 작업을 보내고 포트가 PORTPROMPT:로 설정되면 파일 저장 대화 상자에 XPS 및 OpenXPS가 파일 형식 옵션으로 표시되고 각각 .xps 또는 .oxps를 파일 확장명으로 적용합니다.

매니페스트의 파일 저장 섹션에 대한 다른 옵션에 대한 자세한 내용은 V4 드라이버 매니페스트를 참조하세요.

OpenXPS 인쇄에 대한 앱 지원

Open XML Paper Specification

V4 드라이버 매니페스트