演示如何获得打印状态及控制打印:


     由于Windows下打印一般采用后台服务完成,也就是说样例35返回的“打印成功”实际仅是成功加入后台队列,

要获得后台真实打印的状态变化以及最终是否打印成功结束,需要采用如下捕获语句:

LODOP.SET_PRINT_MODE("CATCH_PRINT_STATUS",true);

执行该语句之后,PRINT指令不再返回那个所谓“打印成功”,而是该任务的JOB代码(打印机序号和JOB序号组成)。

有了该JOB代码,可以用GET_VALUE("PRINT_STATUS_XXX","JOB代码值")语句获得打印状态信息及最终结果。

这与样例28方法不同的是,即便打印任务消失之后仍能查询,也可以循环查询,等待某个状态出现。

下面演示:

1、先点执行打印获得该打印的JOB代码:

2、(1-成功 0-不成功)
3、(1-在 0-不在,可能已打完或未打而删除)
4、(含义见后面解释)
5、
6、
7、
8、
9、

10、
11、(1-忙碌 0-不忙碌)

12、由于打印能并发执行,所以哪怕上面的打印任务还没有完成,

    现在也可以另外执行一个打印(产生新JOB代码:) 并等待其打印成功状态出现:

    等待过程中可以用如下语句对该打印机进行暂停打印、恢复打印及清理打印任务三项控制:
   LODOP.SET_PRINT_MODE("CONTROL_PRINTER:打印机名称或序号","PAUSE");
   LODOP.SET_PRINT_MODE("CONTROL_PRINTER:打印机名称或序号","RESUME");
   LODOP.SET_PRINT_MODE("CONTROL_PRINTER:打印机名称或序号","PURGE");
   先试试暂停打印, 暂停后恢复打印, 或清理其所有打印任务(清理过程稍等待)。

打印状态代码含义:

状态代码是一个枚举组合值,有如下信息所代表的数字合计而成。
1-已暂停
2-错误
4-正删除
8-进入队列
16-正在打印
32-脱机
64-缺纸
128-打印结束
256-已删除
512-堵塞
1024-用户介入
2048-正在重新启动

13、前面的已经打印成功是通过“状态码包含128”且“JOB已不在队列”来判断的,但有些打印机输出完毕状态码不变成128,

而一直等于20(“正在打印16”和“正在删除4”之和),此时页面程序需要针对这种打印机进行附加判断。事实上多数情况下

判断“JOB不在队列”就足可认定已经打印成功!

下面演示逐个打印,也就是前面成功或删除了才继续打印下一个(演示中选“取消”就中断循环):

开始循环打印:

 

<回样例目录