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.
- Llame a OpenPrinter para obtener un identificador para la impresora.
- Inicialice una estructura DOCINFO con los datos de la impresora.
- Llame a StartDocPrinter para indicar que la aplicación enviará datos de documentos a la impresora.
- Llame a StartPagePrinter para indicar que la aplicación enviará una nueva página a la impresora.
- Llame a WritePrinter para enviar los datos.
- Llame a EndPagePrinter para indicar que se han enviado todos los datos de la página actual.
- Llame a EndDocPrinter para indicar que se han enviado todos los datos de este documento.
- 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;
}
Temas relacionados