程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 增強webprint打印控件一次打印多份文檔的方法

增強webprint打印控件一次打印多份文檔的方法

編輯:關於VC++

web打印一直是web管理系統的難點,事實證明,采用輕量級的dll控件來實現web打印,是比較理想的解決方案。

采用vc的ATL技術,結合IE的打印模版技術編寫的webprint.dll,壓縮打包生成dll後,文件下載只有80k左右,是輕量級的打印控件。最近主要實現了如下功能:

1、dll插件的功能修改

1.1增加打印url的屬性

描述:當設置這個屬性的值為一個url鏈接,然後再調用Print()函數做打印,就可以將url鏈接到的網頁打印出來。

語法: webprint.printURL=[StringValue];

Webprint.Print(); 或 webprint.preview();

應用於:webprint對象

使用舉例:

Webprint.InitPrint();

Webprint.printURL=”http://www.fcsoft.com.cn”;

Webprint.Preview();  //會查看到鏈接到的頁面

注意:webprint是打印小插件的id.

1.2增加打印完成的狀態屬性

描述:當調用dll控件做打印文檔的時候,文檔處理完成,成功發送給打印機處理的時候,這個時候,此狀態值會變成”over”;即用戶在做打印文檔的時候,可以通過回調判斷這個屬性的值來判斷文檔是否打印完成。

語法:webprint.state

使用舉例:

Webprint.InitPrint();

Webprint.Print();

……此處需要使用回調來判斷是否打印完成。

If (webprint.state==”over”){

 Alert(“打印完成!”);

}

注意:webprint是打印小插件的id

1.3打印預覽界面圖片顯示

原來:調用windows系統目錄中的圖片,當系統在vista上運行時,不能正常顯示。

修改後:圖片修改成獨立調用的圖片,在vista和windows系統上均可以正常顯示。

1.4 頁邊距的設置 

原來:在windows系統中設置頁邊距正常,在vista操作系統上設置會有問題

修改後:四個頁邊距在windows和vista上設置都沒有問題。

1.5 出現無權限問題 :

原來:點擊直接打印,後快速點 打印預覽,會出現腳本錯誤,無權限。

修改後:沒有這個現象了。

1.6 點擊預覽頁面窗口的關閉後window.close()失效的問題

原來:在預覽 頁面直接點窗口 的關閉,然後頁面的window.close()腳本運行會失效。

修改後:修改了這個問題。

1.7一次打印多份文檔方式

利用在頁面隱藏幀的方式,每個幀裡面加載不同的頁面,做一次點擊打印多份文檔的方式。

1.8打印預覽或打印會出現安全問題提示 

原來:提示信息為“該頁包含潛在的安全隱患,是否繼續”

修改後:不再出現此提示。

2、eprint自定義打印工具的升級

2.1 只首頁打印,尾頁打印,循環頁打印

增加了只首頁打印,只尾頁打印,每頁均打印的功能。例如有的文檔標題只需要第一頁打印,換頁後不需要打印標題;有的只尾頁需要打印一些落款或簽名信息,其它頁均不需要打印;有的需要每頁都打印。

Webprint4.2中eprint自定義打印工具實現了此功能

設置界面:

在ep_band的屬性中,增加打印設置選擇項目:

首頁打印

每頁都打印

尾頁打印

如下圖所示

設置完成後,在相應的ep_band上放置的信息,就會按照預設置的方式來打印。

2.2 利用eprint一次打印多個模版的示例

利用webprint.dll的printState屬性(打印完成後的狀態)來做一次打印多份eprint模版的功能。

在實例頁面中加如下代碼,

//start 一次打印多份模版,將需要打印的模版名放到arr[]中********************************

     var arr = new Array();

     arr[0]= "sample001";

     arr[1]= "sample002";

     arr[2]= "sample003";

     arr[3]= "sample004";

     arr[4]= "sample005";

  var iTime=0;

  var iframeName = "_print_iframe";

     function PrintAll(){

       printNextJob(0);

     }

  function printNextJob(index){

      if(iTime == 0 || window.frames(iframeName).oPrintCtl.printState == "over"){

        if(iTime != 0) window.clearInterval(iTime);

        if(index>=arr.length) {alert("打印完成!"); return;}

        Printer.Print(arr[index],true);

        document.getElementById(iframeName).onreadystatechange= function () {

             if(document.getElementById(iframeName).readyState != "complete") return;

             window.frames(iframeName).oPrintCtl.printState ="start";

             iTime = window.setInterval("printNextJob("+(index+1)+")",500);

                }

    }

  }

  //end****************************************************************

調用printAll();函數後,就可以點擊一次,打印5份模版對應的文檔。

修改arr[n]=xxx; 達到打印各種不同模版的文檔。

實例代碼在:eprint for java\samples\samples.htm 頁面 點擊 一次打印多個

eprint for dotnet\samples\samples.htm 頁面 點擊 一次打印多個

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved