阅读:3872回复:11
请问如何在虚拟打印机的dll中获取当前打印文档的总页数?
请问如何在虚拟打印机的dll中获取当前打印文档的总页数?
或者说,在那种uni接口中获取打印文档的总页数?有个思路也行 |
|
|
沙发#
发布于:2007-08-16 10:55
方法很多了,最简单的方法,在pdev中放个变量,每次StartPage()时就加一,打印完就能得到页数了.
|
|
板凳#
发布于:2007-08-16 14:37
楼上的理解错了,我的意思是希望在startpage前能得到当前打印文档的总页数,而不是在startpage或者nextband中自己去计算总页数,:)
|
|
|
驱动中牛
|
地板#
发布于:2007-08-16 17:32
DevMode结构中的dwCopies是不是呀
|
地下室#
发布于:2007-08-17 18:44
这个好办
你说的startpage是驱动的DrvStartPage吧? DrvStartDoc在他之前吧? DrvStartDoc里有个东东叫JobID吧? 有个函数叫GetJob的,应该能帮上你的忙吧? |
|
5楼#
发布于:2007-08-22 11:05
不知道你注意GetJob的参数没有,他需要打印机句柄,在驱动程序里,DrvStartDoc开始了,打印机肯定是打开了吧,如何获取当前打印句柄这个在
BOOL APIENTRY OEMStartDoc(SURFOBJ *pso, PWSTR pwszDocName, DWORD dwJobId) 中不好获取吧,还是我真的不知道?望赐教,不过你的思路还是挺好! |
|
|
6楼#
发布于:2007-08-22 12:02
这个也好办,可以从DrvEnablePDEV中获取,他在DrvStartDoc前被调用
我没有验证,应该能成功,请楼主试试,别忘了把 结果告诉大家 |
|
7楼#
发布于:2007-08-24 16:18
|
|
|
8楼#
发布于:2007-09-07 10:05
LZ 得到了吗?可以说下不
|
|
9楼#
发布于:2007-10-11 11:51
:)
|
|
|
10楼#
发布于:2008-04-07 17:59
好长时间没来了,忘了粘贴最后我的解决方法了,以下代码经过测试完全正确:
//get the total pages and current user shengws if(dwJobId>0) { JOB_INFO_2 *pJobinfo = NULL; DWORD dwNeeded; GetJob(pDevObj->hPrinter, dwJobId, 2, NULL, 0, &dwNeeded);//获取Job信息,所需空间 pJobinfo=(JOB_INFO_2 *)malloc(dwNeeded); memset(pJobinfo, 0, dwNeeded); GetJob(pDevObj->hPrinter, dwJobId, 2, (LPBYTE)pJobinfo, dwNeeded, &dwNeeded);//将Job信息放入pBuf中 TERSE(UNITEXT("DocName:%s.\r\n"),pJobinfo->pDocument); TERSE(UNITEXT("TotalPages:%d.\r\n"),pJobinfo->TotalPages); TERSE(UNITEXT("UserName:%s.\r\n"),pJobinfo->pUserName); delete pJobinfo; } |
|
|
11楼#
发布于:2009-01-03 14:36
在调用EndDoc前是不可能获得总页数的,而且必须自己统计。。。
如果你想做页码绘制,只能放在后期来做了。。 |
|