fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
阅读:3267回复:17

50分请教:在打印的port monitor中将WritePort中的buffer直接输出的文件后,如何查看实际打印的内容?

楼主#
更多 发布于:2005-03-31 09:43
如题,谢谢!!

最新喜欢:

aasa2aasa2
在交流中学习。。。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-31 12:50
这样做就形成
实际打印的东西变成了打印机能够识别的仿真语言指令了

我们能的到的就是这些打印数据了
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
caesun
驱动小牛
驱动小牛
  • 注册日期2001-12-10
  • 最后登录2006-12-01
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值393点
  • 好评度21点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-01 14:10
打印机语言是?

贴一段上来看看?

[编辑 -  4/1/05 by  caesun]
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-04 09:14
下面是Hook StartDocPort实现打印内容重定向的代码,也就是将打印的内容定向到一个文件。

BOOL WINAPI MyStartDocPort(
HANDLE  hPort,
LPWSTR  pPrinterName,
DWORD   JobId,
DWORD   Level,
LPBYTE  pDocInfo)
{
EnterCritSection();

PORT *pPort=(PORT*)hPort;

if(pPort->dwStatus & PS_STARTDOC)
{
LeaveCritSection();
return FALSE;
}

TCHAR filepath[MAX_PATH];

_tcscpy(filepath,pPort->sPath);
switch(Level)
{
case 1:
{
DOC_INFO_1 *pDoc=(DOC_INFO_1*)pDocInfo;
_tcscat(filepath,pDoc->pDocName);
break;
}
case 2:
{
DOC_INFO_2 *pDoc=(DOC_INFO_2*)pDocInfo;
_tcscat(filepath,pDoc->pDocName);
break;
}
}

//filepath contains now the full path of output file
//change file extension to .ps
PathRenameExtension(filepath,_T(\".ps\"));

//If output file exists: try to delete
if(FileExists(filepath))
DeleteFile(filepath);

pPort->hFile=::CreateFile(
filepath,
GENERIC_WRITE,
0, //dont share the file
NULL, //SECURITY_ATTRIBUTES --> Handle cannot be inherited
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,
NULL); //no template file

if(pPort->hFile==INVALID_HANDLE_VALUE)
{
//could not open file
pPort->hFile=0;

HANDLE hPrinter;
if(OpenPrinter(pPrinterName,&hPrinter,NULL))
{
SetJob(
hPrinter,
JobId,
0,
NULL,
JOB_CONTROL_RESTART);

SetJob(
hPrinter,
JobId,
0,
NULL,
JOB_CONTROL_PAUSE);

CloseHandle(hPrinter);

LeaveCritSection();
return FALSE;
}
}
else
{
//file successfully opened
_tcscpy(pPort->sCurDocument,filepath);
_tcscpy(pPort->sPrinter,pPrinterName);
pPort->dwStatus|=PS_STARTDOC;
pPort->dwJobID=JobId;
}

LeaveCritSection();

return TRUE;
}
在交流中学习。。。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-04 10:07
看的出,你存储的是PS的驱动生成的数据,
搜索一下,会不会有PS的解释器
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-04 10:32
看的出,你存储的是PS的驱动生成的数据,
搜索一下,会不会有PS的解释器

类似GSView的工具是可以查看PS文件的,但是所查看的PS文件必须满足PostScript的规范,
而驱动生成的打印数据是不是一定满足这个规范,至少我现在获得的文件通过GSView是看不到的。

郁闷ing。。。
在交流中学习。。。
caesun
驱动小牛
驱动小牛
  • 注册日期2001-12-10
  • 最后登录2006-12-01
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值393点
  • 好评度21点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-04 23:11
...
想看的是生成出来的文件里的内容...
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-05 09:48
...
想看的是生成出来的文件里的内容...
 


正是,也就是类似打印监控软件\"PrintUsage\"里的内容查看。
在交流中学习。。。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-06 08:42
[quote]...
想看的是生成出来的文件里的内容...
 


正是,也就是类似打印监控软件\"PrintUsage\"里的内容查看。 [/quote]

你试试创建一个文本文件打印机
你可以参考一下下面的文章
http://search.csdn.net/Expert/topic/2566/2566840.xml?temp=.297909

[编辑 -  4/6/05 by  Pregunta]
多交流,多学习,共同提高。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-06 08:56
顺便请教下,你的重定向功能适用与所有打印机吗?

比如本地打印机断口LPT,网络打印端口

而且你存储的数据是工作打印机能识别的原始数据吗?
多交流,多学习,共同提高。
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-04-06 09:52
顺便请教下,你的重定向功能适用与所有打印机吗?

比如本地打印机断口LPT,网络打印端口

而且你存储的数据是工作打印机能识别的原始数据吗?


我参考的做法其实就是建立一个打印到文件的虚拟端口,然后把打印机的端口设为该端口。
至于获得的数据能不能识别,我也不清楚,我只是想把这些数据转换为tif或者jpg的格式,以便浏览。
在交流中学习。。。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-04-06 18:44

我参考的做法其实就是建立一个打印到文件的虚拟端口,然后把打印机的端口设为该端口。
至于获得的数据能不能识别,我也不清楚,我只是想把这些数据转换为tif或者jpg的格式,以便浏览。


呵呵,我估计这个文本文件打印机,只能将文本类的数据保存成我们识别的格式.把这些数据转换为tif或者jpg的格式可能要复杂点,那些工作应该在数据传输工程中做吧


PrintUsage的内容查看我也看了,他是生成tiff格式的图片保存,但是具体在哪个阶段转化数据就不清楚了,还有应该是在应用层通过应用程序来实现的.


多交流,多学习,共同提高。
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-04-07 09:19
PrintUsage应该是使用解释PCL和PS的方式保存打印内容的,例如用GSView可以看PS文件,但是PCL的就不清楚了
在交流中学习。。。
tyoutyou
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-04-07 10:39
[quote]顺便请教下,你的重定向功能适用与所有打印机吗?

比如本地打印机断口LPT,网络打印端口

而且你存储的数据是工作打印机能识别的原始数据吗?


我参考的做法其实就是建立一个打印到文件的虚拟端口,然后把打印机的端口设为该端口。
至于获得的数据能不能识别,我也不清楚,我只是想把这些数据转换为tif或者jpg的格式,以便浏览。 [/quote]
pcl,ps语言的打印机,打印到文件包存的数据流,都是指令集合。如果打印机驱动调用的是gdi固有函数,也就是用raster模式,将文件类容当成image来实现打印的话,想转成jpg不是不可能。但是如果你的打印驱动大量的使用了自己的函数(好像我见过的多数如此),实现了诸如drvtextout,strokepath...之类的方法。估计你要将文件还原就不太现实了。
想知道文件里的类容,最好看看相关的语言解释文件,不过没有专门的工具的话,就得自己读二进制码了(不过有时候也是必须的)。我用的是公司自己内部开发的一套翻译软件,不能外传的。如果你正在开发的话,为什么不找对方要呢。据我所知很多打印机厂家都有自己的解释器阿。。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-04-07 11:03
PrintUsage应该是使用解释PCL和PS的方式保存打印内容的,例如用GSView可以看PS文件,但是PCL的就不清楚了




我在考虑是不是可以通过截获打印池文件(EMF),然后用EMF解码器来还原数据,但是这个解码器么的找到
多交流,多学习,共同提高。
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-04-07 11:26
问题还没有解决,但是还是把分散了先,感谢几位的讨论、指导!
在交流中学习。。。
qmroom
驱动牛犊
驱动牛犊
  • 注册日期2008-05-17
  • 最后登录2008-05-31
  • 粉丝5
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2008-05-22 08:46
我在 www.codeguru.com  上下的例子, 但我用网络打印机打印的时候,
为什么打印服务不调用 MyStartDocPort  函数阿? 而MyStartDocPort函数正式起到重定性作用的???? 本地打印机没有试过

例子的具体地址是: http://www.codeguru.com/Cpp/W-P/printing/article.php/c5893
高人帮忙阿~!!!!!
ytfrdfiw
驱动牛犊
驱动牛犊
  • 注册日期2005-09-28
  • 最后登录2016-02-19
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望138点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2008-06-24 15:37
顶一个,我也碰到这个问题,不知如何解决,高手赐教一下。
游客

返回顶部