Udostępnij przez


Instrukcje: wysyłanie danych bezpośrednio do drukarki GDI

W przykładzie kodu w dalszej części tego tematu pokazano, jak wysyłać dane sterowania drukarkami bezpośrednio do drukarek korzystających z sterowników drukarek opartych na interfejsie GDI.

W poniższych krokach opisano sposób wysyłania danych bezpośrednio do drukarki. Te kroki przedstawiono również w poniższym przykładzie kodu.

  1. Wywołaj OpenPrinter, aby uzyskać dojście do drukarki.
  2. Zainicjuj strukturę DOCINFO przy użyciu danych drukarki.
  3. Wywołaj StartDocPrinter, aby wskazać, że aplikacja będzie wysyłać dane dokumentu do drukarki.
  4. Wywołaj startPagePrinter, aby wskazać, że aplikacja będzie wysyłać nową stronę do drukarki.
  5. Wywołaj WritePrinter, aby wysłać dane.
  6. Wywołaj EndPagePrinter, aby wskazać, że wysłano wszystkie dane dla bieżącej strony.
  7. Wywołaj EndDocPrinter, aby wskazać, że zostały wysłane wszystkie dane tego dokumentu.
  8. Aby zwolnić zasoby, wywołaj ClosePrinter.

Wysyłaj dane sterowania drukarkami bezpośrednio do drukarek korzystających ze sterowników drukarek opartych na 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

OtwórzDrukarkę

StartDocPrinter

StartPagePrinter

WritePrinter