|
- //
- // 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;
- }
复制代码 上述代码来自https://docs.microsoft.com/zh-cn ... y-to-an-xps-printer
大概意思是vista之后使用了新的XPS驱动来操作打印机,
之前的GDI驱动已经支持有限了还是怎么的,说不定就是不支持了说的比较隐晦,
|
|