다음을 통해 공유


표준 XPS 필터

Important

최신 인쇄 플랫폼은 Windows에서 프린터와 통신하는 데 선호되는 수단입니다. 프린터 장치 개발을 위해 Windows 10 및 11의 인쇄 환경을 사용자 지정하려면 MICROSOFT의 IPP 받은 편지함 클래스 드라이버와 PSA(인쇄 지원 앱)를 사용하는 것이 좋습니다.

자세한 내용은 최신 인쇄 플랫폼 및 인쇄 지원 앱 디자인 가이드를 참조하세요.

Windows는 XPS에서 PCL6 및 PostScript 수준 3으로의 기본 제공 변환을 지원하기 위해 두 개의 (표준) XPS 필터를 제공합니다.

Windows 제공 필터는 인쇄 클래스 드라이버와 모델별 v4 인쇄 드라이버 모두에 사용할 수 있습니다. 이러한 XPS 필터는 기존 펌웨어 구현과의 호환성을 보장하기 위해 필요에 따라 IHV 기능 필터뿐만 아니라 IHV 후처리 필터와 결합될 수 있습니다.

Windows에서 제공하는 XPS 필터는 다시 배포할 수 없으며 v3 인쇄 드라이버에서 사용할 수 없습니다.

매니페스트 파일

Windows 제공 XPS 필터를 사용하려면 v4 드라이버 매니페스트 파일은 DriverConfig 섹션의 RequiredFiles 지시문을 사용하여 필터를 지정해야 합니다. 필터의 이름은 다음과 같습니다.

MSxpsPCL6.dll. XPS에서 PCL6으로의 변환을 제공합니다. MSxpsPS.dll. XPS에서 PostScript 수준 3으로의 변환을 제공합니다. 이러한 필터 중 하나를 활용하기 위해 INF 업데이트가 필요하지 않으며 재배포가 지원되지 않습니다. 사용자가 이러한 XPS 필터 사용을 중단하는 것이 좋습니다.

이러한 필터를 사용하도록 인쇄 필터 파이프라인을 구성하려면 다음 예제와 같이 구성 파일을 만들어야 합니다.

PCL6으로의 변환을 지정하는 샘플 구성 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter dll="MSxpsPCL6.dll" clsid="{3821E518-33AF-4d17-92B3-28EB410D46B6}" name="Microsoft XPS to PCL6">
    <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream" />
    <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream" />
  </Filter>  
</Filters>

PostScript로의 변환을 지정하는 샘플 구성 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter dll="MSxpsPS.dll" clsid="{8636D90A-5E03-4d62-9269-E06493C57473}" name="Microsoft XPS to PS">
    <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream" />
    <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream" />
  </Filter>  
</Filters>

지원되는 기능

표준 XPS 필터는 많은 일반적인 기능을 지원합니다. 모든 기능 정의는 드라이버에 GPD 또는 PPD 파일을 사용합니다. MSxpsPCL6.dll 필터는 구성에 GPD 파일을 사용해야 하며 MSxpsPS.dll 필터를 구성하려면 PPD 파일을 사용해야 합니다. 달리 명시되지 않는 한, 사용자 지정 PDL 명령이 기능에 대해 지정된 경우 사용됩니다.

삽입 문자열이 특정 섹션(*Order 명령으로 지정됨)에 있는 경우 GPD 파일의 경우 필터는 해당 문자열의 내용에 대해 여러 가지 가정을 하고 기본 명령을 보내지 않습니다. 이 경우 기본 명령을 보내면 명령 충돌이 발생할 수 있기 때문입니다. 따라서 GPD 파일 작성자는 다음 지침을 따라야 합니다.

  • JOB_SETUP. #

    • PCL6 이진 스트림 헤더(예: ")<SP>HP-PCL XL;1;<CR><LF>")가 있어야 합니다.

    • 모든 필수 특성을 포함하여 BeginSession 연산자가 있어야 합니다.

    • OpenDataSource 연산자는 필요한 모든 특성을 포함하여 존재해야 합니다.

  • PAGE_SETUP. #

    • 모든 필수 특성을 포함하여 BeginPage 연산자가 있어야 합니다.
  • PAGE_FINISH. #

    • EndPage 연산자가 있어야 합니다.
  • JOB_FINISH. #

    • CloseDataSource 연산자가 있어야 합니다.

    • EndSession 연산자가 있어야 합니다.

    • EndPJLCommands 연산자가 있어야 합니다.

XPS 표준 필터는 *PrintableArea, *PrintableOrigin 또는 *ImageableArea 명령에 따라 페이지의 원본을 설정하는 적절한 PDL 데이터를 생성합니다. 또한 예상 원본에서 추가 오프셋을 방지하기 위해 GPD 파일은 용지 크기에 대한 *Cmd 문자열 정의에 =SetPageOrigin 명령을 지정해서는 안 됩니다.

표준 XPS 필터에서 지원하는 PrintTicket 기능에 대한 자세한 내용은 지원되는 PrintTicket 기능을 참조 하세요.

후처리 필터에서 PrintTicket 검색

Windows 8에서 릴리스된 v4 드라이버 모델에서 MSxps 필터 중 하나 후에 후처리 필터를 추가한 경우 사전 처리 필터를 추가해야 하는 경우도 있습니다. 작업 수준 인쇄 티켓을 캡처하려면 사전 처리 필터를 추가해야 했습니다. 그러나 이 방법은 기본적으로 스트림 기반 MSxps 필터 중 하나 앞에 개체 모델 기반 필터를 추가하여 역직렬화한 다음 인쇄 데이터를 직렬화하여 PrintTicket를 추출하기만 하면 됩니다.

Windows 8.1 사용자 기본 PrintTicket은 MSxps 필터의 작업 수준 PrintTicket과 병합되고 병합된 PrintTicket는 인쇄 필터 파이프라인의 속성 모음에 추가됩니다. 병합된 PrintTicket는 사용자 PrintTicket와 동일한 방식으로 인쇄 필터 파이프라인의 속성 모음에 추가됩니다. 속성의 이름은 다음과 같습니다.

#define XPS_FP_JOB_LEVEL_PRINTTICKET    "JobPrintTicket"

InitializeFilter 중에 MTI 필터는 IPrintReadStreamFactory구현을 속성 모음에 추가합니다. 이 인터페이스의 한 메서드인 GetStream은 PrintTicket 스트림을 사용할 수 있을 때까지 차단됩니다. 이렇게 하면 속성에 대한 액세스를 동기화할 수 있습니다.

중요: InitializeFilter에서 GetStream이 호출되면 교착 상태가 발생합니다.

기타 기능

표준 XPS 필터에서 지원되지 않는 PrintTicket 기능의 경우 필터는 모든 PrintTicket 멤버를 확인하여 GPD/PPD에서 참조되는지 확인한 다음 출력할 명령을 지정합니다. 이 경우 지정된 명령이 생성됩니다.

GPD 기능은 다음 순서로 매핑됩니다.

  1. PrintSchemaKeywordMap 값이 지정되고 PrintTicket 기능 이름과 일치합니다.

  2. PrintSchemaPrivateNamespaceURI 특성이 지정되고 GPD 기능 이름이 PrintTicket 기능 이름과 일치합니다. 일치하는 기능 이름은 간단하지 않으며 다음과 같은 여러 규칙을 따릅니다.

    1. 첫 번째 옵션의 *Order 섹션이 PAGE_SETUP 또는 PAGE_FINISH GPD 기능이 "Page"로 시작되지 않는 경우 일치를 시도하기 전에 "Page"가 GPD 기능 이름 앞에 추가됩니다.

    2. 첫 번째 옵션의 *Order 섹션이 DOC_SETUP 또는 DOC_FINISH GPD 기능이 "문서"로 시작되지 않는 경우 일치를 시도하기 전에 "문서"가 GPD 기능 이름 앞에 추가됩니다.

    3. 첫 번째 옵션의 *Order 섹션이 JOB_SETUP 또는 JOB_FINISH GPD 기능이 "작업"으로 시작되지 않는 경우 일치를 시도하기 전에 "작업"이 GPD 기능 이름 앞에 추가됩니다.

    4. [A-Z], [a-z], [0-9] 또는 '_'이 아닌 문자는 일치를 시도하기 전에 '_' 문자로 바뀝니다. 그러나 *NoPunctuationCharSubstitute인 경우? 특성이 TRUE로 설정된 다음 필터가 '.' 또는 '-'을 '_' 문자로 대체하지 않습니다.

PPD 기능은 다음 순서로 매핑됩니다.

  1. PrintSchemaKeywordMap 값이 지정되고 PrintTicket 기능 이름과 일치합니다.

  2. PrintSchemaPrivateNamespaceURI 특성이 지정되고 PPD 기능 이름이 PrintTicket 기능 이름과 일치합니다. 일치하는 기능 이름은 간단하지 않으며 다음과 같은 여러 규칙을 따릅니다.

    1. OrderDependency 섹션이 ExitServer, Prolog 또는 JCLSetup이고 PPD 기능 이름이 "작업"으로 시작되지 않는 경우 일치를 시도하기 전에 "작업"이 PPD 기능 이름 앞에 추가됩니다.

    2. OrderDependency 섹션이 DocumentSetup이고 PPD 기능 이름이 "Document"로 시작되지 않는 경우 일치를 시도하기 전에 "Document"가 PPD 기능 이름 앞에 추가됩니다.

    3. OrderDependency 섹션이 AnySetup인 경우 필터는 두 가지 일치 검사를 수행합니다.

      1. PPD 기능 이름이 "문서"로 시작하지 않으면 일치를 시도하기 전에 "Document"가 PPD 기능 이름 앞에 추가됩니다.

      2. 일치하는 항목이 없거나 PPD 기능 이름이 "작업"으로 시작되지 않는 경우 일치를 시도하기 전에 "작업"이 PPD 기능 이름 앞에 추가됩니다.

    4. OrderDependency 섹션이 PageSetup이고 PPD 기능 이름이 "Page"로 시작되지 않는 경우 일치를 시도하기 전에 "Page"가 PPD 기능 이름 앞에 추가됩니다.

    5. [A-Z], [a-z], [0-9] 또는 '_'이 아닌 문자는 일치를 시도하기 전에 '_' 문자로 바뀝니다. 그러나 *MSNoPunctuationCharSubstitute인 경우 문자열이 TRUE로 설정되고 필터가 '.' 또는 '-'을 '_' 문자로 대체하지 않습니다.

GPD 및 PPD 옵션은 다음 순서로 매핑됩니다.

  1. PrintSchemaKeywordMap 값이 지정되고 PrintTicket 옵션 이름과 일치합니다.

  2. PrintSchemaPrivateNamespaceURI 특성이 지정되고 GPD/PPD 옵션 이름이 PrintTicket 옵션 이름과 일치합니다. 일치하는 옵션 이름은 간단하지 않으며 다음과 같은 여러 규칙을 따릅니다.

    1. GPD/PPD 옵션 이름이 [0-9] 또는 '_'로 시작하는 경우 일치를 시도하기 전에 '_' 문자가 GPD/PPD 옵션 이름 앞에 추가됩니다. 그러나 다음과 같은 추가 규칙이 적용됩니다.

      1. GPD 옵션 및 *NoPunctuationCharSubstitute인 경우? 특성이 TRUE로 설정되면 필터 앞에 '_' 문자가 추가되지 않습니다.

      2. PPD 옵션 및 *MSNoPunctuationCharSubstitute인 경우? 문자열이 TRUE로 설정된 다음 필터 앞에 '_' 문자가 추가되지 않습니다.

    2. [A-Z], [a-z], [0-9] 또는 '_'이 아닌 문자는 일치를 시도하기 전에 '_' 문자로 바뀝니다. 그러나 다음과 같은 추가 규칙이 적용됩니다.

      1. GPD 옵션 및 *NoPunctuationCharSubstitute인 경우? 특성이 TRUE로 설정된 다음 필터가 '.' 또는 '-'을 '_' 문자로 대체하지 않습니다.

      2. PPD 옵션 및 *MSNoPunctuationCharSubstitute인 경우? 문자열이 TRUE로 설정된 다음 필터가 '.' 또는 '-'을 '_' 문자로 대체하지 않습니다.

양식에서 트레이 매핑으로

XPS에서 PCL6으로, XPS에서 PS로의 필터는 양식-트레이 매핑 테이블을 지원합니다. 여러 트레이가 선택한 미디어 크기(예: 문자)를 지원하는 경우 필터는 다음과 같이 동률을 끊습니다.

  1. GPD 또는 PPD 파일에 지정된 대로 기본 트레이가 지정된 미디어 크기를 사용하도록 구성된 경우 기본 트레이가 사용됩니다.

  2. 그렇지 않으면 필터는 지정된 미디어 크기로 구성된 첫 번째 트레이(GPD/PPD 파일에 지정된 대로 위에서 아래로)를 선택합니다.

추가 백사이드 페이지 표시 안 함

기본적으로 XPS에서 PCL6으로, XPS에서 PS로의 필터는 빈 페이지를 삽입하여 혼합 미디어 크기, 미디어 형식, 입력 또는 출력 빈이 포함된 문서의 이중 인쇄를 처리합니다. 필터가 이 빈 페이지를 삽입하면 디바이스가 새 미디어 전면에 다음 페이지를 인쇄하도록 합니다. 백사이드 페이지를 출력할 필요가 없는 디바이스의 경우 드라이버의 GPD 또는 PPD 파일에 다음 키워드를 추가하여 이 동작을 억제할 수 있습니다.

파일 형식 백사이드 페이지 표시 안 함 키워드
GPD *SuppressExtraBacksidePages?: TRUE
PPD *MSSuppressExtraBacksidePages: True

SetPageDevice 명령 최적화

MSxpsPS.dll 드라이버를 사용하는 PostScript 디바이스의 기본 동작은 모든 페이지에 대해 SetPageDevice 명령이 실행되고 이 명령은 페이지에 지정된 전체 옵션 집합을 명시한다는 것입니다. 일부 디바이스는 이 기술로 성능이 좋지 않을 수 있습니다.

그러나 디바이스가 MSxpsPS.dll 사용하고 함께 제공되는 PPD 파일이 *MSOptimizeSetPageDevice: True를 지정하는 경우 PostScript 디바이스 동작은 다음과 같습니다. - 이전 페이지 이후 SetPageDevice 명령의 일부가 변경된 모든 페이지에 대해 페이지에 지정된 옵션 집합을 나타내기 위해 새 SetPageDevice 명령이 실행됩니다. 그러나 이전 페이지 이후 SetPageDevice 명령의 일부가 변경되지 않은 경우 페이지에 대해 SetPageDevice 명령이 실행되지 않습니다.

지원되는 PrintTicket 기능

V4 프린터 드라이버 렌더링