检测打印的页面百分比(页面覆盖率)

本文关键字:覆盖率 百分比 打印 检测 | 更新日期: 2023-09-27 18:31:20

在我的一个Windows应用程序中,我需要一个模块来检测正在打印的页面的覆盖范围。

现在,我正在使用打印队列监视库来检测打印作业事件。

但是有没有办法检测打印了多少页面部分。?

提前谢谢。

检测打印的页面百分比(页面覆盖率)

由于您使用 WinForms 在 C# 中对应用程序进行了编程,因此我假设您使用了 PrintDocument,并且您的打印发生在使用 PrintPageEventArgs.GraphicsPrintPage事件中。

如果是这种情况,应该可以将打印的代码折射到单独的方法中,该方法将Graphics的实例作为参数(可能还有其他参数,如页面大小等)。

然后,您可以创建一个具有足够大小(并且与纸张具有相同纵横比)的(白色)Bitmap对象,并将其提供给上述方法。然后,您可以计算已着色的像素,从而计算打印机将打印的页面百分比。

请记住,在计算时,您可能必须考虑打印区域周围的边距和不同的纸张尺寸。

如果代码的折射证明很重,则可以为 Graphics 对象创建一个包装器,该包装器在打印时"复制"对Bitmap的所有绘制调用,然后继续计算像素数。

(此答案假设您要监视应用程序,而不是系统上的其他应用程序)

我知道一种方法可以做到这一点。您需要创建打印处理器。打印处理器是一个驱动程序,可以在将数据发送到打印监视器之前更改或读取数据(这是以专有格式向打印机端口发出内容的驱动程序)。

在此处查看打印体系结构 http://technet.microsoft.com/en-us/library/cc976755.aspx 的全局视图。以下是打印机处理器功能的说明:https://serverfault.com/questions/304536/what-is-the-reason-for-choosing-a-different-print-processor。

如何使用 PowerShell 更改打印处理器:http://blogs.technet.com/b/chad/archive/2012/10/31/tip-52-mixing-the-old-and-new-setting-a-printer-s-print-processor-using-powershell-wmi-and-setprinter-exe.aspx

下面是如何执行此操作(即创建打印处理器)的示例:http://code.msdn.microsoft.com/windowshardware/Genprint-4a71134f。

要使其正常工作,您需要将GdiPlayPageEMF重定向到内存上的位图,然后您可以在将其发送到打印机手柄之前计算其像素。你可以在谷歌上搜索GdiPlayPageEMF,关于如何做这种事情会有有趣的结果。

此外,这里有很多关于打印的好信息 http://www.undocprint.org/winspool/spool_files#reading_job_data。

我希望这有所帮助。