-
-
[求助]如何截获一个打印任务里的完整数据
-
发表于: 2009-10-13 19:30 4728
-
问题描述如下:
一张很小的图片,一张A4的纸张装的下,于是在一张A4的纸张里就能够完全的打印和显示出来.
一张很大的图片,打印预缆程序就会把其分成几张A4的纸上.但是这时候你就取不到完整的一张图片了.因为其分成了几张A4的纸.
我尝试过以下几种方法:
1.用虚拟打印驱动输出bmp后,我裁减边缘,最后组合.根据我的测试,其边缘的偏移,每张图片都不一样.所以最后也没办法还原原来的图片.
2.我取DC,然后在内存里copy View的内容,直接取整张图片.比如说下流程
FindWindow
GetWindowDC
....
失败了,因为取的只是显示出来的窗口那些内容,比如说窗口如果有滚动条,滚动条的下边显示不出来.
3.直接在虚拟打印程序内部截获数据.我实际上对虚拟打印程序一点都不熟,于是在网上找了份代码,dbg print了下,看哪里能看到完整的图形数据. 其主要用IPrintOemUni 这个接口实现.
查SDK之,觉得最有可能取的数据的函数为ImageProcessing,我就去那编了个.惊奇的发现那里其实也是不对的.
于是我发狂般的在N个地方加了trace(dbg print),几乎所有的函数.
所以,我也很清晰的观察出了该驱动的工作流程.但是我发现居然没有一个地方,可以完整而又轻松的取出view上的图.
以画图程序为例子,我在上边画了一张3000*4000的bmp,我如何才能在打印里还原出这张3000*4000的图.
谢谢各位领导.
一张很小的图片,一张A4的纸张装的下,于是在一张A4的纸张里就能够完全的打印和显示出来.
一张很大的图片,打印预缆程序就会把其分成几张A4的纸上.但是这时候你就取不到完整的一张图片了.因为其分成了几张A4的纸.
我尝试过以下几种方法:
1.用虚拟打印驱动输出bmp后,我裁减边缘,最后组合.根据我的测试,其边缘的偏移,每张图片都不一样.所以最后也没办法还原原来的图片.
2.我取DC,然后在内存里copy View的内容,直接取整张图片.比如说下流程
FindWindow
GetWindowDC
....
失败了,因为取的只是显示出来的窗口那些内容,比如说窗口如果有滚动条,滚动条的下边显示不出来.
3.直接在虚拟打印程序内部截获数据.我实际上对虚拟打印程序一点都不熟,于是在网上找了份代码,dbg print了下,看哪里能看到完整的图形数据. 其主要用IPrintOemUni 这个接口实现.
查SDK之,觉得最有可能取的数据的函数为ImageProcessing,我就去那编了个.惊奇的发现那里其实也是不对的.
于是我发狂般的在N个地方加了trace(dbg print),几乎所有的函数.
所以,我也很清晰的观察出了该驱动的工作流程.但是我发现居然没有一个地方,可以完整而又轻松的取出view上的图.
以画图程序为例子,我在上边画了一张3000*4000的bmp,我如何才能在打印里还原出这张3000*4000的图.
谢谢各位领导.
赞赏
看原图
赞赏
雪币:
留言: