다음을 통해 공유


방법: XPS 프린터로 직접 데이터 보내기

이 항목에서는 XPSDrv 프린터 드라이버를 사용하는 프린터로 프린터 제어 데이터를 직접 보내는 방법을 설명합니다.

다음 단계에서는 프린터로 직접 데이터를 보내는 방법을 설명합니다. 이러한 단계는 다음 코드 예제에도 설명되어 있습니다.

  1. OpenPrinter를 호출하여 프린터에 대한 핸들을 가져옵니다.
  2. 프린터 데이터를 사용하여 DOCINFO 구조를 초기화합니다.
  3. StartDocPrinter를 호출하여 애플리케이션이 문서 데이터를 프린터로 보낼 것임을 나타냅니다.
  4. WritePrinter를 호출하여 데이터를 보냅니다.
  5. EndDocPrinter를 호출하여 이 문서의 모든 데이터가 전송되었음을 나타냅니다.
  6. ClosePrinter를 호출하여 리소스를 해제합니다.

XPSDrv 프린터 드라이버를 사용하는 프린터로 직접 프린터 컨트롤 데이터를 보냅니다.

// 
//  RawDataToXpsPrinter - sends binary data directly to a printer 
//          with an XPSDrv Printer Driver 
//  
// szPrinterName: NULL-terminated string specifying printer name 
// lpData:        Pointer to raw data bytes 
// dwCount        Length of lpData in bytes 
//  
// Returns: TRUE for success, FALSE for failure. 
//  
BOOL RawDataToXpsPrinter (LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
    BOOL     bStatus = FALSE;
    HANDLE     hPrinter = NULL;
    DOC_INFO_1       DocInfo;
    DWORD    dwPrtJob = 0L;
    DWORD    dwBytesWritten = 0L;

    // Open a handle to the printer. 
    bStatus = OpenPrinter (szPrinterName, &hPrinter, NULL);
    
    if (bStatus) {
        // Fill in the structure with info about this "document." 
        DocInfo.pDocName = (LPTSTR)_T("My Document");
        DocInfo.pOutputFile = NULL;

        // Enter the datatype of this buffer.
        //  Use "XPS_PASS" when the data buffer should bypass the 
        //    print filter pipeline of the XPSDrv printer driver. 
        //    This datatype would be used to send the buffer directly 
        //    to the printer, such as when sending print head alignment 
        //    commands. Normally, a data buffer would be sent as the
        //    "RAW" datatype.
        //
        DocInfo.pDatatype = (LPTSTR)_T("XPS_PASS");

        dwPrtJob = StartDocPrinter (
                        hPrinter,
                        1,
                        (LPBYTE)&DocInfo);

        if (dwPrtJob > 0) {
                // Send the data to the printer. 
                bStatus = WritePrinter (
                hPrinter,
                lpData,
                dwCount,
                &dwBytesWritten);
        }
        
        EndDocPrinter (hPrinter);

        // Close the printer handle. 
        bStatus = ClosePrinter(hPrinter);
    }
    
    if (!bStatus || (dwCount != dwBytesWritten)) {
        bStatus = FALSE;
    } else {
        bStatus = TRUE;
    }

    return bStatus;
}

ClosePrinter

EndDocPrinter

EndPagePrinter

OpenPrinter

StartDocPrinter

StartPagePrinter

WritePrinter