인쇄 프로세서에서 GDI 함수 사용

NT 기반 운영 체제 EMF를 입력 형식으로 처리하는 인쇄 프로세서에서 사용하기 위해 Gdi32.dll 사용자 모드 GDI 함수 집합을 내보냅니다. 다음 표에는 제공된 함수가 나열되어 있습니다.

함수 이름 Description
GdiDeleteSpoolFileHandle 스풀 파일 핸들을 해제합니다.
GdiEndDocEMF 인쇄 작업 문서에 대한 EMF 재생 작업을 완료합니다.
GdiEndPageEMF 실제 페이지에 대한 EMF 재생 작업을 완료하고 프린터에서 페이지를 내보낸다.
GdiGetDC 프린터의 디바이스 컨텍스트에 대한 핸들을 반환합니다.
GdiGetDevmodeForPage 문서 페이지의 DEVMODEW 구조를 반환합니다.
GdiGetPageCount 문서 페이지 수를 반환합니다.
GdiGetPageHandle 문서 페이지에 대한 핸들을 반환합니다.
GdiGetSpoolFileHandle 다른 GDI 함수에 대한 입력으로 필요한 스풀 파일 핸들을 반환합니다.
GdiPlayPageEMF 문서 페이지와 연결된 EMF 레코드를 재생합니다.
GdiResetDCEMF 프린터의 디바이스 컨텍스트를 다시 설정합니다.
GdiStartDocEMF 인쇄 작업 문서에 대한 초기화 작업을 수행합니다.
GdiStartPageEMF 실제 페이지에 대한 초기화 작업을 수행합니다.

EMF 인쇄 프로세서의 PrintDocumentOnPrintProcessorGdiGetSpoolFileHandle 을 호출하여 스풀 파일 핸들을 가져오고 GdiGetDC 를 호출하여 프린터의 디바이스 컨텍스트 핸들을 가져와야 합니다. 그런 다음, 다음 단계를 수행할 수 있습니다.

  • 각 인쇄 작업 문서에 대해 EMF 레코드를 재생하기 전에 GdiStartDocEMF 를 호출해야 하며 마지막 EMF 레코드가 재생된 후 GdiEndDocEMF 를 호출해야 합니다.

  • 각 실제 페이지를 인쇄하려면 페이지에 문서 페이지를 그리기 전에 GdiStartPageEMF 를 호출해야 하며, 실제 페이지에서 마지막 문서 페이지를 그린 후에 GdiEndPageEMF 를 호출해야 합니다.

  • 실제 페이지에 그려질 각 문서 페이지에 대해 GdiGetDevmodeForPage 를 호출하여 마지막 문서 페이지를 그린 이후 DEVMODE 구조체 내용이 변경되었는지 확인해야 합니다. DEVMODE가 변경된 경우 GdiEndPageEMF 및 GdiStartPageEMF를 호출하여 새 물리적 페이지를 시작해야 하며 GdiResetDCEMF를 호출하여 프린터의 디바이스 컨텍스트를 업데이트해야 합니다. 문서 페이지는 먼저 GdiGetPageHandle 을 호출하여 문서 페이지 핸들을 가져온 다음 GdiPlayPageEMF 를 호출하여 페이지를 그립니다.

작업이 완전히 그려진 후 인쇄 프로세서는 GdiDeleteSpoolFileHandle을 호출해야 합니다.

인쇄 프로세서가 페이지 인쇄를 시작하기 전에 총 페이지 수가 필요한 경우(예: 역순으로 페이지를 인쇄하는 경우) GdiGetPageCount를 호출할 수 있지만 이 함수는 스풀링이 끝날 때까지 반환되지 않으므로 스풀링하는 동안 인쇄 기능을 사용하지 않도록 설정합니다.

인쇄 프로세서가 이러한 GDI 함수를 사용하는 경우 EnumPrintProcessorDatatypes 함수는 일반 Windows 2000 이상 EMF 형식을 나타내는 지원되는 데이터 형식으로 "NT EMF"를 반환해야 합니다. 인쇄 프로세서는 EMF 레코드를 수정해서는 안됩니다.