狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

lodop和c-lodop通過打印狀態和任務不在隊列獲取打印成功

admin
2023年9月26日 0:2 本文熱度 932

之前的博文有通過判斷pirnt的返回值,判斷加入隊列算打印成功,建議使用這種簡單的判斷方法。
此外還有其他判斷方法,例如通過PRINT_STATUS_OK判斷,但是這個狀態不是所有打印機能支持這種判斷成功,這個是通過“狀態碼包含128”來 判斷,但是但有些打印機輸出完畢狀態碼不變成128,而一直等于20(“正在打印16”和“正在刪除4”之和),所有這種單獨用這個PRINT_STATUS_OK判斷,有些打印機會判斷不出來
這種情況下,需要加附加判斷,判斷打印機不在隊列為成功。或者直接使用JOB不在隊列為成功,JOB不在隊列 有兩種情況,可能是打印成功了,也可能是在隊列刪除了該任務。

方法1:判斷加入隊列算成功(之前的相關博文:)
這種脫機 ,缺紙等情況下,加入隊列會一直在排隊,這種也會提示打印成功。
或者可以修改提示,改為“成功發送了指令,成功加入隊列”等提示也可以,避免脫機缺紙等情況,任務一直在排隊,卻提示打印成功,用戶可能不滿意。

方法2:單獨用這個PRINT_STATUS_OK判斷
不是所有打印機都支持,不同打印機狀態碼可能不同,所有盡量不用這個單獨判斷。如果需要的打印機固定,可實際測試該打印機支不支持這個。

方法3:用PRINT_STATUS_OK和不在隊列聯合判斷,或者單獨判斷不在隊列。
這種方法如果是手動在隊列刪除了任務,也會判斷為成功。
但是大多數情況下,一般用戶不會在打印中途刪除任務,所以這種方法還可以使用,但是這種是根據JOB判斷,所以是判斷單個任務是否打印成功,如果打很多,這種方法也不太好,還比如不判斷。

目前市面上很多軟件,包括本人用來打發票的開票軟件,都沒有提示打印成功的,試試上打印機本身如果缺紙卡紙或脫機等,打印機本身會有提示音或提示燈,windows系統一般會在右下角提示打印錯誤,所以不提示成功也是常見的。
或者用方法1和方法3判斷,單獨用狀態碼的那個,由于有的打印機判斷不出來,不建議使用。

這三種方法,都不是絕對的打印成功,但是近似打印成功
方法1:缺紙,脫機等也會認為打印成功
方法2:有些打印機不支持,會總認為不成功
方法3:在隊列刪除任務,也會被認為打印成功

本文下面的圖示中的成功,是我手動在隊列刪除任務的效果。查看log日志,可以看出這打印成功或刪除是從任務不在隊列里判斷出來的。此時間不是打印成功時間,是我手動刪除打印機隊列該任務所用的時間。用手動刪除隊列任務模擬打印成功

測試代碼 :
如本代碼 ,變量c有兩個作用,一個是判斷前一個任務是否判斷完成,一個是用來計算打印所用的秒數,用JS的setTimeout方法,每隔1秒進行判斷一次,一直到判斷成功或超時停止判斷。

里面包含的判斷:
1.由于lodop和c-lodop獲取返回值的方法不同,所以里面要判斷當前走的是哪個,如果是c-lodop,就采用回調方式獲取返回值,如果是lodop,就直接獲取返回值。關于回調函數,可查看本博客其他相關博文。
2,最開始先判斷c的值,如果上一個任務判斷完成(成功或超時),就把c重新設置為0。c如果為0,說明當前沒有正在打印的任務,或之前的任務已經判斷完成,可以進行新的任務。如果c不為0,說明前面的任務還沒判斷完成,該代碼中通過alert提示正在打印中,然后return,不在執行后面的方法。
3.判斷PRINT_STATUS_OK打印狀態,如果通過狀態判斷為成功,提示成功。
判斷PRINT_STATUS_EXIST,JOB是否在隊列,不在則判斷為成功,提示成功或刪除(本文用的刪除模擬成功會任務在隊列消失)判斷job時,如果前面的那個判斷失敗,再進行判斷下一個,如果前面的成功,就沒有必要再繼續判斷了,判斷c>0,表示前面的判斷沒成功,就是相當于c-lodop中的else if的寫法,只是寫法不同,兩者同時成立,用且語句,上面那個判斷為成功了,就會把c重置為0。
最后加個else,前面的判斷不成功會會一致繼續定時判斷,判斷當c>50,超過50秒時,因為c每次加1,所以當c是51秒時就停止這個定時,因為如果脫機什么的狀態,這個任務會一直在隊列里,這么長時間都沒打印出來,一直判斷下去就停止不了了,所以弄個判斷截止的時間,當這個時間到了,還判斷不到打印成功那個地方,就提示超時或在這個時間內失敗。

里面需要獲取的返回值:
LODOP.PRINTA()————-返回job代碼
LODOP.SET_PRINT_MODE("CATCH_PRINT_STATUS",true);加這句才是返回job代碼,否則是默認返回值,參考本博客的那個加入隊列算成功的博文。
PRINT_STATUS_OK-----根據狀態獲取成功(有的打印機不支持)
PRINT_STATUS_EXIST----判斷任務是否在隊列

一個回調獲取兩個回調值,要加LODOP.On_Return_Remain=true;,否則一個回調后就銷毀了。

測試代碼 :

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>WEB打印控件LODOP</title>
<script language="javascript" src="LodopFuncs.js"></script>
</head>
<body>
<a href="javascript:PrintWait()">通過狀態和不在隊列打印測試是否成功</a><br>
<script language="javascript" type="text/javascript">  
var LODOP,P_ID="",TaskID1,TaskID2,t,c=0;//聲明為全局變量
function PrintWait(){
       
if (c>0) {alert("正打印中...");return;}  
       LODOP
=getLodop();
       LODOP.PRINT_INIT(
"");
       LODOP.ADD_PRINT_TEXT(
50,231,260,39,"打印的頁面部分內容");
       LODOP.SET_PRINT_MODE(
"CATCH_PRINT_STATUS",true);
       
if (LODOP.CVERSION) {
           LODOP.On_Return
=function(TaskID,Value){
               P_ID
=Value;
           console.log(
"該任務走的是c-lodop方式,job代碼為"+P_ID);
               
if (P_ID!="") {    c=0;C_WaitFor();};
           };
           LODOP.PRINTA();
       }
else {
           P_ID
=LODOP.PRINTA();
       console.log(
"該任務走的是lodop插件方式,job代碼為"+P_ID);
           
if (P_ID!="") {    c=0;WaitFor();};
       };
   }
   
function WaitFor(){    
       c
=c+1;    
       console.log(
"正等待(JOB代碼是"+P_ID+")打印結果:"+c+"");
       t
=setTimeout("WaitFor()",1000);    
       
if (LODOP.GET_VALUE("PRINT_STATUS_OK",P_ID)) {
           clearTimeout(t);
       console.log(
"走的lodop插件方式:PRINT_STATUS_OK判斷為打印成功");
           c
=0;
           alert(
"打印成功!");
       }
if ((!LODOP.GET_VALUE("PRINT_STATUS_EXIST",P_ID))&&(c>0)) {
           clearTimeout(t);
      console.log(
"走的lodop插件方式:判斷該該任務已經不在隊列,已成功或刪除任務");
           c
=0;
           alert(
"打印任務不在隊列,成功或刪除");
       }
else if (c>50){
           clearTimeout(t);
          console.log(
"打印超過50秒沒捕獲到成功狀態!");
           c
=0;
           alert(
"打印超過50秒沒捕獲到成功狀態!");        
       };
   };
   
function C_WaitFor(){    
       c
=c+1;    
       console.log(
"正等待(JOB代碼是"+P_ID+")打印結果:"+c+"");
       t
=setTimeout("C_WaitFor()",1000);
       LODOP.On_Return_Remain
=true;
       LODOP.On_Return
=function(TaskID,Value){
           
if (TaskID==TaskID1){
               
if (Value==1){alert(TaskID+" "+Value);
                   clearTimeout(t);
                    console.log(
"走的c-lodop方式:PRINT_STATUS_OK判斷為打印成功");
                   c
=0;
                   alert(
"打印成功!");
               };
           }
else
           if (TaskID==TaskID2){
               
if (Value==0){
                   clearTimeout(t);
                  console.log(
"走的c-lodop方式:判斷該該任務已經不在隊列,已成功或刪除任務");
                   c
=0;
                   alert(
"打印任務不在隊列,成功或刪除");
               };
           };        
       };        
       TaskID1
=LODOP.GET_VALUE("PRINT_STATUS_OK",P_ID);
       TaskID2
=LODOP.GET_VALUE("PRINT_STATUS_EXIST",P_ID);
       
if (c>50){
           clearTimeout(t);
           console.log(
"打印超過50秒沒捕獲到成功狀態!");
           c
=0;
           alert(
"打印超過50秒沒捕獲到成功狀態!");
       };
   };
</script>
</body>

圖示:用手動刪除任務模擬打印成功,任務不在隊列算成功。

 

前面圖片用了顏色區分各個部分,追著顏色看代碼更清晰。


該文章在 2023/9/26 0:02:55 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved