Dela via


Anvisningar: Skicka data direkt till en XPS-skrivare

Det här avsnittet beskriver hur du skickar skrivarkontrolldata direkt till skrivare som använder XPSDrv-skrivardrivrutiner.

Följande steg beskriver hur du skickar data direkt till en skrivare. De här stegen visas också i kodexemplet som följer.

  1. Anropa OpenPrinter för att få ett handtag till skrivaren.
  2. Initiera en DOCINFO- struktur med skrivardata.
  3. Anropa StartDocPrinter för att ange att programmet skickar dokumentdata till skrivaren.
  4. Anropa WritePrinter för att skicka data.
  5. Anropa EndDocPrinter för att ange att alla data för det här dokumentet har skickats.
  6. Anropa ClosePrinter för att frigöra resurserna.

Skicka skrivarkontrolldata direkt till skrivare som använder XPSDrv-skrivardrivrutiner.

// 
//  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;
}

StängSkrivare

EndDocPrinter

EndPagePrinter

ÖppnaSkrivare

StartDocPrinter

StartPagePrinter

WritePrinter