Partager via


Guide pratique pour envoyer des données directement à une imprimante XPS

Cette rubrique explique comment envoyer des données de contrôle d’imprimante directement aux imprimantes qui utilisent des pilotes d’imprimante XPSDrv.

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.

  1. Appelez OpenPrinter pour obtenir un handle sur l’imprimante.
  2. Initialisez une structure DOCINFO avec les données de l’imprimante.
  3. Appelez StartDocPrinter pour indiquer que l’application enverra des données de document à l’imprimante.
  4. Appelez WritePrinter pour envoyer les données.
  5. Appelez EndDocPrinter pour indiquer que toutes les données de ce document ont été envoyées.
  6. 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 XPSDrv.

// 
//  RawDataToXpsPrinter - sends binary data directly to a printer 
//          with an XPSDrv Printer Driver 
//  
// 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 RawDataToXpsPrinter (LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
    BOOL     bStatus = FALSE;
    HANDLE     hPrinter = NULL;
    DOC_INFO_1       DocInfo;
    DWORD    dwPrtJob = 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;

        // Enter the datatype of this buffer.
        //  Use "XPS_PASS" when the data buffer should bypass the 
        //    print filter pipeline of the XPSDrv printer driver. 
        //    This datatype would be used to send the buffer directly 
        //    to the printer, such as when sending print head alignment 
        //    commands. Normally, a data buffer would be sent as the
        //    "RAW" datatype.
        //
        DocInfo.pDatatype = (LPTSTR)_T("XPS_PASS");

        dwPrtJob = StartDocPrinter (
                        hPrinter,
                        1,
                        (LPBYTE)&DocInfo);

        if (dwPrtJob > 0) {
                // Send the data to the printer. 
                bStatus = WritePrinter (
                hPrinter,
                lpData,
                dwCount,
                &dwBytesWritten);
        }
        
        EndDocPrinter (hPrinter);

        // Close the printer handle. 
        bStatus = ClosePrinter(hPrinter);
    }
    
    if (!bStatus || (dwCount != dwBytesWritten)) {
        bStatus = FALSE;
    } else {
        bStatus = TRUE;
    }

    return bStatus;
}

ClosePrinter

EndDocPrinter

EndPagePrinter

OpenPrinter

StartDocPrinter

StartPagePrinter

WritePrinter