Compartir a través de


Cómo: Enviar datos directamente a una impresora GDI

El ejemplo de código más adelante en este tema muestra cómo enviar datos de control de impresora directamente a impresoras que usan controladores de impresora basados en GDI.

En los pasos siguientes se describe cómo enviar datos directamente a una impresora. Estos pasos también se muestran en el ejemplo de código siguiente.

  1. Llame a OpenPrinter para obtener un identificador para la impresora.
  2. Inicialice una estructura DOCINFO con los datos de la impresora.
  3. Llame a StartDocPrinter para indicar que la aplicación enviará datos de documentos a la impresora.
  4. Llame a StartPagePrinter para indicar que la aplicación enviará una nueva página a la impresora.
  5. Llame a WritePrinter para enviar los datos.
  6. Llame a EndPagePrinter para indicar que se han enviado todos los datos de la página actual.
  7. Llame a EndDocPrinter para indicar que se han enviado todos los datos de este documento.
  8. Llame a ClosePrinter para liberar los recursos.

Envíe datos de control de impresora directamente a impresoras que usen controladores de impresora basados en 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