使用 Windows 后台处理程序 API 以编程方式打印 PDF 文件
Programatically print PDF file using Windows Spooler API
是否可以使用 windows 假脱机程序 API 打印 PDF 文件。我尝试使用以下代码,但它不起作用...
int print_handle = 0;
OpenPrinter(pPrinterName, &print_handle, NULL);
if (print_handle == 0)
{
return 0;
}
docinfo1.pDocName = (LPTSTR)("My PDF");
docinfo1.pOutputFile = NULL;
docinfo1.pDatatype = (LPTSTR)("RAW");
temp = StartDocPrinter(print_handle, 1, &docinfo1);
temp = StartPagePrinter(print_handle);
temp = WritePrinter(print_handle, (LPBYTE)filebuff, filelen, &bytes_written);
EndPagePrinter(print_handle);
EndDocPrinter(print_handle);
WritePrinter 函数 return 成功但未打印任何内容。使用此 API 打印 TXT 和 PRN 文件正在运行。
Windows 没有打印 PDF 文件的内置功能。
您必须使用外部应用程序或库,例如Ghostscript.
我应该注意到,因为您的代码使用 "RAW" 数据类型(如 official sample),所以它会将写入的作业数据直接发送到打印机。 ASCII 数据之所以有效,是因为实际上所有打印机都可以接收和打印 ASCII。如果打印机将 PDF 理解为 PDL(页面描述语言 - 其他示例为 PCL 或 PostScript),它将打印您的 PDF。但对于所有其他打印机,PDF 需要转换为打印机可以理解的 PDL。
是否可以使用 windows 假脱机程序 API 打印 PDF 文件。我尝试使用以下代码,但它不起作用...
int print_handle = 0;
OpenPrinter(pPrinterName, &print_handle, NULL);
if (print_handle == 0)
{
return 0;
}
docinfo1.pDocName = (LPTSTR)("My PDF");
docinfo1.pOutputFile = NULL;
docinfo1.pDatatype = (LPTSTR)("RAW");
temp = StartDocPrinter(print_handle, 1, &docinfo1);
temp = StartPagePrinter(print_handle);
temp = WritePrinter(print_handle, (LPBYTE)filebuff, filelen, &bytes_written);
EndPagePrinter(print_handle);
EndDocPrinter(print_handle);
WritePrinter 函数 return 成功但未打印任何内容。使用此 API 打印 TXT 和 PRN 文件正在运行。
Windows 没有打印 PDF 文件的内置功能。
您必须使用外部应用程序或库,例如Ghostscript.
我应该注意到,因为您的代码使用 "RAW" 数据类型(如 official sample),所以它会将写入的作业数据直接发送到打印机。 ASCII 数据之所以有效,是因为实际上所有打印机都可以接收和打印 ASCII。如果打印机将 PDF 理解为 PDL(页面描述语言 - 其他示例为 PCL 或 PostScript),它将打印您的 PDF。但对于所有其他打印机,PDF 需要转换为打印机可以理解的 PDL。