Guide pratique pour envoyer des données directement à une imprimante GDI
L’exemple de code plus loin dans cette rubrique montre comment envoyer des données de contrôle d’imprimante directement aux imprimantes qui utilisent des pilotes d’imprimante basés sur GDI.
Les étapes suivantes décrivent comment envoyer des données directement à une imprimante. Ces étapes sont également illustrées dans l’exemple de code qui suit.
- Appelez OpenPrinter pour obtenir un handle sur l’imprimante.
- Initialisez une structure DOCINFO avec les données d’imprimante.
- Appelez StartDocPrinter pour indiquer que l’application enverra des données de document à l’imprimante.
- Appelez StartPagePrinter pour indiquer que l’application enverra une nouvelle page à l’imprimante.
- Appelez WritePrinter pour envoyer les données.
- Appelez EndPagePrinter pour indiquer que toutes les données de la page active ont été envoyées.
- Appelez EndDocPrinter pour indiquer que toutes les données de ce document ont été envoyées.
- Appelez ClosePrinter pour libérer les ressources.
Envoyez les données de contrôle d’imprimante directement aux imprimantes qui utilisent des pilotes d’imprimante basés sur 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;
}
Rubriques connexes