WritePrinter 函数

WritePrinter 函数通知打印后台处理程序应将数据写入指定的打印机。

注意

WritePrinter 仅支持 GDI 打印,不得用于 XPS 打印。 如果打印作业使用 XPS 或 OpenXPS 打印路径,请使用 XPS 打印 API。 不支持使用 WritePrinter 将 XPS 或 OpenXPS 打印作业发送到后台处理程序,并可能导致不确定的结果。

语法

BOOL WritePrinter(
  _In_  HANDLE  hPrinter,
  _In_  LPVOID  pBuf,
  _In_  DWORD   cbBuf,
  _Out_ LPDWORD pcWritten
);

参数

hPrinter [in]

打印机的句柄。 使用 OpenPrinterAddPrinter 函数检索打印机句柄。

pBuf [in]

指向字节数组的指针,该数组包含应写入打印机的数据。

cbBuf [in]

数组的大小(以字节为单位)。

pcWritten [out]

指向一个值的指针,该值接收写入打印机的数据的字节数。

返回值

如果函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

注意

这是一个阻塞或同步函数,可能不会立即返回。 此函数的返回速度取决于运行时因素,例如网络状态、打印服务器配置以及编写应用程序时难以预测的打印机驱动程序实现因素。 从管理与用户界面交互的线程调用此函数可能会使应用程序看起来无响应。

打印作业的顺序如下所示:

  1. 若要开始打印作业,请调用 StartDocPrinter
  2. 若要开始每个页面,请调用 StartPagePrinter
  3. 若要将数据写入页面,请调用 WritePrinter
  4. 若要结束每页,请调用 EndPagePrinter
  5. 对任意数量的页面重复 2、3 和 4。
  6. 若要结束打印作业,请调用 EndDocPrinter

当高级文档 ((如 Adobe PDF 或 Microsoft Word 文件) 或其他打印机数据) (PCL、PS 或 HPGL) 直接发送到打印机时,文档中定义的打印设置优先于 Windows 打印设置。 当在 StartDocPrinter 调用的 pDocInfo 参数中传递的 DOC_INFO_1 结构的 pDatatype 成员的值为“RAW”时,文档输出必须以硬件理解的语言完全描述 DEVMODE 样式的打印作业设置。

在 Windows XP 之前的 Windows 版本中,当后台打印文件中的页面超过大约 350 MB 时,它可能无法打印,也不会发送错误消息。 例如,打印大型 EMF 文件时可能会发生这种情况。 Windows XP 之前的 Windows 版本中的页面大小限制取决于许多因素,包括可用的虚拟内存量、通过调用进程分配的内存量以及进程堆中的碎片量。 在 Windows XP 和更高版本的 Windows 中,EMF 文件的大小必须为 2GB 或更小。 如果使用 WritePrinter 写入非 EMF 数据(如打印机就绪 PDL),则文件大小仅受可用磁盘空间的限制。

示例

有关使用此函数的示例程序,请参阅 如何:使用 GDI 打印 API 进行打印

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winspool.h (包括 Windows.h)

Winspool.lib
DLL
Spoolss.dll

另请参阅

打印

打印后台处理程序 API 函数

EndDocPrinter

EndPagePrinter

OpenPrinter

StartDocPrinter

StartPagePrinter

WritePrinter