#define PRINTER_NAME "Microsoft Print to PDF"
BOOL RawDataToPrinter(LPSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
HANDLE hPrinter;
DOC_INFO_1 DocInfo;
DWORD dwJob;
DWORD dwBytesWritten;
// Need a handle to the printer.
if (!OpenPrinterA(szPrinterName, &hPrinter, NULL))
{
printf("error OpenPrinterA\r\n");
PrintError(GetLastError(), TEXT("OpenPrinter"));
return FALSE;
}
// Fill in the structure with info about this "document."
DocInfo.pDocName = (wchar_t*)TEXT("sand_box_rule12345");
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = (wchar_t*)TEXT("RAW");
// Inform the spooler the document is beginning.
if ((dwJob = StartDocPrinterW(hPrinter, 1, (LPBYTE)&DocInfo)) == 0)
{
PrintError(GetLastError(), TEXT("StartDocPrinter"));
ClosePrinter(hPrinter);
return FALSE;
}
// Start a page.
if (!StartPagePrinter(hPrinter))
{
PrintError(GetLastError(), TEXT("StartPagePrinter"));
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
return FALSE;
}
// Send the data to the printer.
if (!WritePrinter(hPrinter, lpData, dwCount, &dwBytesWritten))
{
PrintError(GetLastError(), TEXT("WritePrinter"));
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
return FALSE;
}
// End the page.
if (!EndPagePrinter(hPrinter))
{
PrintError(GetLastError(), TEXT("EndPagePrinter"));
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
return FALSE;
}
// Inform the spooler that the document is ending.
if (!EndDocPrinter(hPrinter))
{
PrintError(GetLastError(), TEXT("EndDocPrinter"));
ClosePrinter(hPrinter);
return FALSE;
}
// Tidy up the printer handle.
ClosePrinter(hPrinter);
// Check to see if correct number of bytes were written.
if (dwBytesWritten != dwCount)
{
//printf(TEXT("Wrote %d bytes instead of requested %d bytes.\n"), dwBytesWritten, dwCount);
return FALSE;
}
return TRUE;
}
打印机小例子(windowsAPI)
最新推荐文章于 2024-02-11 18:31:09 发布