shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
阅读:3872回复:11

请问如何在虚拟打印机的dll中获取当前打印文档的总页数?

楼主#
更多 发布于:2007-08-14 20:42
请问如何在虚拟打印机的dll中获取当前打印文档的总页数?
或者说,在那种uni接口中获取打印文档的总页数?有个思路也行
喂,小孩,你的小JJ露出来了!
coolboylmk
驱动牛犊
驱动牛犊
  • 注册日期2006-11-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望71点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-16 10:55
方法很多了,最简单的方法,在pdev中放个变量,每次StartPage()时就加一,打印完就能得到页数了.
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-16 14:37
楼上的理解错了,我的意思是希望在startpage前能得到当前打印文档的总页数,而不是在startpage或者nextband中自己去计算总页数,:)
喂,小孩,你的小JJ露出来了!
angel_dolphin_i
驱动中牛
驱动中牛
  • 注册日期2007-08-16
  • 最后登录2011-09-06
  • 粉丝1
  • 关注0
  • 积分289分
  • 威望444点
  • 贡献值1点
  • 好评度552点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-16 17:32
DevMode结构中的dwCopies是不是呀
coolboylmk
驱动牛犊
驱动牛犊
  • 注册日期2006-11-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望71点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-08-17 18:44
这个好办
你说的startpage是驱动的DrvStartPage吧?
DrvStartDoc在他之前吧?
DrvStartDoc里有个东东叫JobID吧?
有个函数叫GetJob的,应该能帮上你的忙吧?
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-08-22 11:05
不知道你注意GetJob的参数没有,他需要打印机句柄,在驱动程序里,DrvStartDoc开始了,打印机肯定是打开了吧,如何获取当前打印句柄这个在
BOOL APIENTRY OEMStartDoc(SURFOBJ *pso, PWSTR pwszDocName, DWORD dwJobId)
中不好获取吧,还是我真的不知道?望赐教,不过你的思路还是挺好!
喂,小孩,你的小JJ露出来了!
coolboylmk
驱动牛犊
驱动牛犊
  • 注册日期2006-11-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望71点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-08-22 12:02
这个也好办,可以从DrvEnablePDEV中获取,他在DrvStartDoc前被调用
我没有验证,应该能成功,请楼主试试,别忘了把 结果告诉大家
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-08-24 16:18
喂,小孩,你的小JJ露出来了!
scholar
驱动牛犊
驱动牛犊
  • 注册日期2004-03-15
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分56分
  • 威望55点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-09-07 10:05
LZ 得到了吗?可以说下不
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-10-11 11:51
:)
喂,小孩,你的小JJ露出来了!
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
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;
    }
喂,小孩,你的小JJ露出来了!
goyejin
驱动牛犊
驱动牛犊
  • 注册日期2007-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望100点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2009-01-03 14:36
在调用EndDoc前是不可能获得总页数的,而且必须自己统计。。。
如果你想做页码绘制,只能放在后期来做了。。
游客

返回顶部