다음을 통해 공유


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

이 항목의 뒷부분에 있는 코드 샘플에서는 GDI 기반 프린터 드라이버를 사용하는 프린터로 직접 프린터 제어 데이터를 보내는 방법을 보여 줍니다.

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

  1. 호출하여 OpenPrinter로 프린터 핸들을 얻습니다.
  2. 프린터 데이터를 사용하여 DOCINFO 구조를 초기화합니다.
  3. StartDocPrinter 호출하여 응용 프로그램이 문서 데이터를 프린터로 보낼 것임을 나타냅니다.
  4. StartPagePrinter 호출하여 애플리케이션이 프린터로 새 페이지를 보낼 것임을 나타냅니다.
  5. WritePrinter 호출하여 데이터를 보냅니다.
  6. EndPagePrinter 호출하여 현재 페이지의 모든 데이터가 전송되었음을 나타냅니다.
  7. EndDocPrinter 호출하여 이 문서의 모든 데이터가 전송되었음을 나타냅니다.
  8. ClosePrinter을(를) 호출하여 리소스 해제를 수행합니다.

GDI 기반 프린터 드라이버를 사용하는 프린터로 직접 프린터 제어 데이터를 보냅니다.

// 
// RawDataToPrinter - sends binary data directly to a printer 
//  
// 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 RawDataToPrinter(LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
    BOOL     bStatus = FALSE;
    HANDLE     hPrinter = NULL;
    DOC_INFO_1 DocInfo;
    DWORD      dwJob = 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;
        DocInfo.pDatatype = (LPTSTR)_T("RAW");

        // Inform the spooler the document is beginning. 
        dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo );
        if (dwJob > 0) {
            // Start a page. 
            bStatus = StartPagePrinter( hPrinter );
            if (bStatus) {
                // Send the data to the printer. 
                bStatus = WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten);
                EndPagePrinter (hPrinter);
            }
            // Inform the spooler that the document is ending. 
            EndDocPrinter( hPrinter );
        }
        // Close the printer handle. 
        ClosePrinter( hPrinter );
    }
    // Check to see if correct number of bytes were written. 
    if (!bStatus || (dwBytesWritten != dwCount)) {
        bStatus = FALSE;
    } else {
        bStatus = TRUE;
    }
    return bStatus;
}

ClosePrinter

EndDocPrinter

EndPagePrinter

OpenPrinter

StartDocPrinter

StartPagePrinter

WritePrinter