Поделиться через


Практическое руководство. Отправка данных непосредственно на принтер GDI

В примере кода далее в этом разделе показано, как отправлять данные управления принтерами непосредственно в принтеры, использующие драйверы принтера на основе GDI.

Ниже описано, как отправлять данные непосредственно на принтер. Эти шаги также показаны в следующем примере кода.

  1. Вызовите OpenPrinter, чтобы получить дескриптор принтера.
  2. Инициализируйте структуру DOCINFO с данными принтера.
  3. Вызовите StartDocPrinter, чтобы указать, что приложение будет отправлять данные документа на принтер.
  4. Вызовите StartPagePrinter, чтобы указать, что приложение отправит новую страницу на принтер.
  5. Вызовите WritePrinter для отправки данных.
  6. Вызовите EndPagePrinter, чтобы указать, что все данные для текущей страницы отправлены.
  7. Вызовите EndDocPrinter, чтобы указать, что все данные для этого документа отправлены.
  8. Вызовите ClosePrinter, чтобы освободить ресурсы.

Отправляйте данные управления принтерами непосредственно на принтеры, использующие драйверы принтера на основе 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

ОткрытьПринтер

StartDocPrinter

StartPagePrinter

WritePrinter