Bagikan melalui


Cara: Mengirim Data Langsung ke Printer GDI

Sampel kode nanti dalam topik ini menunjukkan cara mengirim data kontrol printer langsung ke printer yang menggunakan driver printer berbasis GDI.

Langkah-langkah berikut menjelaskan cara mengirim data langsung ke printer. Langkah-langkah ini juga diilustrasikan dalam contoh kode yang mengikuti.

  1. Panggil OpenPrinter untuk mendapatkan handle ke perangkat printer.
  2. Inisialisasi struktur DOCINFO dengan data printer.
  3. Panggil StartDocPrinter untuk menunjukkan bahwa aplikasi akan mengirim data dokumen ke printer.
  4. Panggil StartPagePrinter untuk menunjukkan bahwa aplikasi akan mengirim halaman baru ke printer.
  5. PanggilWritePrinteruntuk mengirim data.
  6. PanggilEndPagePrinter untuk menunjukkan bahwa semua data untuk halaman saat ini telah dikirim.
  7. PanggilEndDocPrinter untuk menunjukkan bahwa semua data untuk dokumen ini telah dikirim.
  8. Panggil ClosePrinter untuk merilis sumber daya.

Kirim data kontrol printer langsung ke printer yang menggunakan pengandar printer berbasis 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