使用打印处理器中的 GDI 函数
Gdi32.dll 导出一组用户模式 GDI 函数,供处理基于 NT 的操作系统 EMF 作为输入格式的打印处理器使用。 下表列出了提供的函数。
函数名称 | 说明 |
---|---|
GdiDeleteSpoolFileHandle | 释放假脱机文件句柄。 |
GdiEndDocEMF | 完成打印作业文档的 EMF 播放操作。 |
GdiEndPageEMF | 完成物理页面的 EMF 播放操作,并从打印机中弹出页面。 |
GdiGetDC | 返回打印机设备上下文的句柄。 |
GdiGetDevmodeForPage | 返回文档页的 DEVMODEW 结构。 |
GdiGetPageCount | 返回文档页数。 |
GdiGetPageHandle | 返回文档页的句柄。 |
GdiGetSpoolFileHandle | 返回一个后台处理文件句柄,该句柄需要作为其他 GDI 函数的输入。 |
GdiPlayPageEMF | 播放与文档页关联的 EMF 记录。 |
GdiResetDCEMF | 重置打印机的设备上下文。 |
GdiStartDocEMF | 对打印作业文档执行初始化操作。 |
GdiStartPageEMF | 对物理页执行初始化操作。 |
EMF 打印处理器的 PrintDocumentOnPrintProcessor 应调用 GdiGetSpoolFileHandle 以获取后台打印文件句柄,并 调用 GdiGetDC 以获取打印机的设备上下文句柄。 然后,它可以执行以下步骤:
对于每个打印作业文档,必须在播放任何 EMF 记录之前调用 GdiStartDocEMF ,并且必须在播放最后一条 EMF 记录后调用 GdiEndDocEMF 。
对于要打印的每个物理页,必须在页面上绘制任何文档页之前调用 GdiStartPageEMF ,并且必须在物理页上绘制最后一个文档页之后调用 GdiEndPageEMF 。
对于要在物理页上绘制的每个文档页,必须调用 GdiGetDevmodeForPage 来确定自绘制最后一个文档页以来 DEVMODE 结构内容是否已更改。 如果 DEVMODE 已更改,则必须通过调用 GdiEndPageEMF 和 GdiStartPageEMF) (启动新的物理页面,并且必须通过调用 GdiResetDCEMF 来更新打印机的设备上下文。 通过首先调用 GdiGetPageHandle 获取文档页句柄,然后调用 GdiPlayPageEMF 绘制页面,在物理页上绘制文档页。
完全绘制作业后,打印处理器必须调用 GdiDeleteSpoolFileHandle。
如果打印处理器需要总页计数,然后才能开始打印页面 (例如,以相反顺序打印页面) 它可以调用 GdiGetPageCount,但此函数在后台打印结束之前不会返回,因此会禁用在后台打印时打印的功能。
如果打印处理器使用这些 GDI 函数,则其 EnumPrintProcessorDatatypes 函数必须返回“NT EMF”作为支持的数据类型,该数据类型表示通用 Windows 2000 及更高版本的 EMF 格式。 打印处理器不得修改 EMF 记录。