无限制免费版,完美您的WEB应用--PAZU在线打印
?
一、概述
PAZU 是4Fang 為配合“四方在線”軟件于2004年開發的WEB打印控件,適用于各種WEB軟件項目的打印。
PAZU是客戶端軟件,使用于IE作為客戶端的所有應用,與服務器端開發語言無關,即PAZU支持所有的開發語言開發的WEB應用,無論是Java還是Dot Net還是PHP 還是…都沒有問題,客戶端是IE就可以了。
如果你的應用的客戶端不是IE,是firefox/chrome等非IE瀏覽器,您就需要PAZU的NP版本(NP版本我們的項目小組正在內部測試,估計在2009年10月份會推出給大家使用,敬請留意)
PAZU廣泛支持IE6、IE7、IE8,支持WinXP以上操作系統,包括Windows Vista 和 Windows 7。
PAZU還支持IE內核的非IE瀏覽器, 如傲游、QQ瀏覽器、世界之窗等。
PAZU還支持使用IE瀏覽器編程對象自己編寫的各種應用瀏覽器。
由于Windows Vista 以上操作系統和IE8以上版本在系統權限校驗、安全性方面的巨大提升,使得目前網上公布的絕大部分WEB打印控件都不能完美支持WinVista和Win7、IE8等新一代WEB應用平臺。PAZU的開發小組花費了大量的時間來使得PAZU具備最完全的兼容能力。
PAZU于2005年投入正式商用,是國內最早的WEB打印控件,被廣大客戶和朋友廣泛應用于:電信、移動通信、銀行、政府、醫院、教育等各種大型應用中,這些前期付費的用戶為PAZU和4Fang的發展貢獻了寶貴的“糧草”,在此我們對前期付費購買PAZU許可的所有客戶朋友表示最高的敬意。
2009年6月,4Fang 決定自2009年6月20日起,PAZU完全無限制免費推出,4Fang邁出的這一步這標志著4Fang的策略由一家相對技術封閉的應用軟件開發公司走向技術開放的新里程。4Fang 將以:
標準、開放、易用
為新的技術指導策略,團結和凝聚更多的開發人員,為用戶提供最簡單實用的應用軟件產品。4Fang 陸續還會開放4Fang專有WEB應用平臺—LAPUTAC (一個同時支持數據在服務器、客戶端存儲,同時支持WEB應用模式和單獨打包模式的領先應用平臺,詳見http://www.4Fang.net/apps/SaaS/ )
PAZU 的永久主站網址 http://www.4Fang.net/tech/pazu.html
PAZU 的永久下載網址 http://www.4Fang.net/4ff/sc_setup.exe
PAZU 開發包下載網址 http://www.4Fang.net/4ff/pazu.rar?
PAZU的討論和意見反饋請到4Fang的論壇 http://www.4Fang.net/BBS/
二、技術文檔
1. 入門基礎
PAZU 是一個ActiveX組件(NP版本是一個Plugin),本文檔只討論ActiveX版本(IE內核瀏覽器適用),NP版本的說明文檔我們將另文發布。
PAZU 是一個已經通過微軟代碼認證簽名的控件,用戶可以在使用到這個控件的時候會自動提示安裝,保證發布的便利性。
在你的WEB頁里面使用<Object>標簽可以引用PAZU控件,如下:
<object? classid="clsid:AF33188F-6656-4549-99A6-E394F0CE4EA4"
codebase=“http://www.4Fang.net/4ff/sc_setup.exe”
id="pazu"
name="pazu" >?
?????????? <param? name="License"? value="You Need a License from 4Fang"/>
? </object>
說明:<object> 元素是用于嵌入ActiveX的,Flash也是通過這種方式嵌入到頁面里面的。
????? Classid里面的字符串是指向PAZU的專屬標識,是不能更改的。系統通過這個值檢索并載入PAZU控件
????? Codebase 是指向用戶可以下載到PAZU安裝包的網址,如果安裝包在你自己的網站上,你可以更改這個codebase屬性,使得用戶可以順利下載安裝PAZU控件。如果這個網址設置錯誤,IE將不會提示用戶下載安裝。
????? Id 屬性允許你通過javascript或者vbscript使用getElementById方法,獲得PAZU控件對象。
????? Name屬性和id屬性類似
????? 按我們的免費授權約定,您不應該也不允許更改id 和 name 的值。
????? Param 參數,必須有一個License 的屬性,value 是這個參數屬性的值。它的意義是4Fang的授權許可。
????? 您可以向4Fang申請一個免費的授權,詳細的申請方法請看本文的許可授權章節,你要把你獲得的授權碼填入到Value值里面,PAZU才能正常工作。
注意:當你用http://127.0.0.1/ 開頭去訪問你的應用的時候,或者是雙擊的你網頁文件直接打開網頁的時候,不填入許可PAZU也可以正常運作。因此如果你要測試或者體驗PAZU的功能而不打算使用PAZU發布你的應用,您就不必要向4Fang提成免費許可申請。
2. 屬性和方法
PAZU內置兩個對象:TWin 和 TPrinter
PAZU這個對象結構的屬性和方法如下:
PAZU 
 ???? |--------- TWin 對象
 ???? |?????????????????????? |------------ appWin??????????????? 方法 隱藏IE菜單、工具條、標題欄、狀態欄等
 ???? |?????????????????????? |------------ MaxWin??????????????? 方法? 窗口最大化
 ???? |?????????????????????? |------------ MinWin???????????????? 方法?? 窗口最小化
 ???? |????????????????????? └----------- CloseWin???????????? 方法?? 關閉窗口
 ???? |
 ???? |--------- TPrinter 對象?????????????????????? 
 ???? |?????????????????????? |------------ marginTop???????????????????? 屬性 上邊距
 ???? |?????????????????????? |------------ marginBottom?????????????? 屬性 下邊距
 ???? |?????????????????????? |------------ marginLeft???????????????????? 屬性? 左邊距
 ???? |?????????????????????? |------------ marginRight????????????????? 屬性? 右邊距
 ???? |?????????????????????? |------------ footer???????????????????????????? 屬性 頁腳
 ???? |?????????????????????? |------------ header?????????????????????????? 屬性? 頁眉
 ???? |?????????????????????? |------------ orientation???????????????????? 屬性 整型:紙張方向 1=縱向? 2=橫向
 ???? |?????????????????????? |------------ paperName?????????????????? 屬性?? 紙張大小名稱
 ???? |?????????????????????? |------------ printerName????????????????? 屬性?? 打印機名稱
 ???? |?????????????????????? |------------ isPrintBackground??????? 屬性? 是否打印背景 true / false
 ???? |?????????????????????? |------------ isZoomOutToFit??????????? 屬性?? 是否縮放以適應大小打印 true / false
 ???? |?????????????????????? |------------ printTemplate??????????????? 屬性?? 打印模板的URL
 ???? |?????????????????????? |------------ copies???????????????????????????? 屬性?? 打印份數
 ???? |?????????????????????? |------------ range?????????????????????????????? 屬性?? 頁面范圍
 ???? |?????????????????????? |------------ isCopyByCopy??????????????? 屬性??? 是否整份打印結束后再打印下一份 true / false
 ???? |?????????????????????? |------------ getDefaultPrinter???????????? 方法??? 獲得默認打印機的對象
 ???? |?????????????????????? |------------ printToDefaultPrinter????? 方法??? 把要打印的字符串輸送到默認打印機(配合getDefaultPrinter 使用)
 ???? |?????????????????????? |------------ getPaperForms????????????? 方法??? 返回所有紙張格式的列表,以vbCrlf 分割
 ???? |?????????????????????? |------------ getPrinters?????????????????????? 方法??? 返回一個打印機列表,以vbCrlf 分割
 ???? |?????????????????????? |------------ createPaper???????????????????? 方法??? 按指定的寬度和高度創建自定義紙張
 ???? |?????????????????????? |------------ doPrint????????????????????????????? 方法??? 執行打印
 ???? |?????????????????????? |------------ doPrint_??????????????????????????? 方法??? 執行打印但是不進行頁面參數設置
 ???? |?????????????????????? |------------ doPreview??????????????????????? 方法??? 打印預覽
 ???? |?????????????????????? |------------ doPageSetup?????????????????? 方法??? 執行頁面參數的設置
 ???? |?????????????????????? |------------ showPageSetup????????????? 方法??? 彈出頁面設置窗口
 ???? |????????????????????? └----------- writeHTMLtoOfficeFile???? 方法?? 把HTML導出為Office EXCEL或者 Word格式文件
 ???? |
 ???? |--------- appWin???????? 方法???? 舊版本兼容? 
 ???? |--------- doPrint????????? 方法???? 舊版本兼容
 ???? |--------- pageSetup?? 方法???? 舊版本兼容
 ???? |--------- Fly????????????????? 方法???? LAPUTAC平臺專用
 ???? |--------- Run?????????????? 方法????? LAPUTAC平臺專用
 ??? └-------- AddObj???????? 方法????? LAPUTAC平臺專用
3. TWin對象詳解
???????? TWin 對象???????? 
 ????????????????????????? |------------ appWin???????????????? 方法 隱藏IE菜單、工具條、標題欄、狀態欄等,有一個bool的參數: appWin(true)?? appWin(false) 
|????????????????????????? 兩者的區別在于是否隱藏標題欄
 ????????????????????????? |------------ MaxWin???????????????? 方法? 窗口最大化??? MaxWin()
 ????????????????????????? |------------ MinWin????????????????? 方法?? 窗口最小化??? MinWin()
 ???????????????????????? └----------- CloseWin????????????? 方法?? 關閉窗口??????? CloseWin()
Javascript實例代碼:
//1.把IE窗口變成App窗口,不隱藏標題欄??
pazu.TWin.appWin(false);??
//2.把IE窗口變成App窗口,隱藏標題欄??
pazu.TWin.appWin(true);??
//3.最大化???
pazu.TWin.MaxWin();??
//4.最小化???
pazu.TWin.MinWin();??
//5.關閉窗口???
pazu.TWin.CloseWin();??
DEMO和實例網頁請看目錄下的pazu_twin.html
4. TPrinter對象詳解
DEMO和實例網頁請看目錄下的pazu_tprinter.html
marginTop???????????????????? 屬性 上邊距?? 數據類型:數字?? 單位: 毫米
 marginBottom?????????????? 屬性 下邊距?? 數據類型:數字?? 單位: 毫米
 marginLeft???????????????????? 屬性? 左邊距?? 數據類型:數字?? 單位: 毫米
 marginRight????????????????? 屬性? 右邊距?? 數據類型:數字?? 單位: 毫米
例子:把上邊距設置為10mm
pazu.TPrinter. marginTop=10
footer???????????????????????????? 屬性 頁腳?? 數據類型:字符串
 header?????????????????????????? 屬性? 頁眉?? 數據類型:字符串
例子:設置頁眉
pazu.TPrinter.header=”這是新的頁眉”
要取消頁眉和頁腳,只要賦給它們一個空字符串就行了,例如不要頁眉:
pazu.TPrinter.header=””
同時頁眉和頁腳也支持左中右的對齊方式和自動用日期、URL、頁碼等的填充。這方面的信息可以參考IE這方面的相關文檔
orientation???????????????????? 屬性 紙張方向? 數據類型:整數1或者2 , 1=縱向? 2=橫向
例子:設置紙張方向為橫向
pazu.TPrinter. orientation=2
paperName?????????????????? 屬性?? 紙張大小名稱? 數據類型:字符串
 printerName????????????????? 屬性?? 打印機名稱??? 數據類型:字符串
 這兩個屬性我們都不要求完全匹配,可以采用左匹配的方式,舉例:
假設您有兩臺打印機,一臺是 Epson 1600K III ,一臺是 HP Deskjet 300。如果你要制定打印機為 HP Deskjet 300 你有兩種方式:
方式一:全匹配 pazu.TPrinter. printerName=” HP Deskjet 300”
方式二:左匹配 pazu.TPrinter. printerName=” HP”
紙張的大小也是一樣的道理,例如,指定用B5紙:
pazu.TPrinter. paperName=”B5”
提示:所有紙張格式和所有打印機的列表都可以通過pazu的相應方法取得,你還可以自定義紙張的大小。請看本文相應的章節。
isPrintBackground??????? 屬性? 是否打印背景? 數據類型:Boolean? true / false
 isZoomOutToFit??????????? 屬性?? 是否縮放以適應大小打印? 數據類型:Boolean true / false
 printTemplate??????????????? 屬性?? 打印模板的URL
 copies???????????????????????????? 屬性?? 打印份數? 數據類型:整數,默認為1
 range?????????????????????????????? 屬性?? 頁面范圍? 數據類型:字符串
 isCopyByCopy??????????????? 屬性??? 是否整份打印結束后再打印下一份?? 數據類型:Boolean? true / false
說明:
copies屬性允許你當前內容打印多份拷貝
range 你可以指定打印的頁面,例如:
只打印1到5頁:pazu.TPrinter.range=”1-5”
只打印1,3,5,7頁:pazu.TPrinter.range=”1,3,5,7”
提示:利用range屬性可以實現雙面打印功能
printTemplate屬性是打印模板的URL,詳細的內容請參考微軟的printTemplate技術的說明。
getPrinters?????????????????????? 方法??? 返回一個打印機列表,返回以一個回車換行符分隔的字符串
 例如:獲得所有的打印機
var ps=pazu.TPrinter.getPrinters();
????? //獲得是一個以回車換行分隔的字符串
????? //alert(ps);
????? var pa=ps.split("/r/n");
????? for(var i=0;i<pa.length;i++){
??????? alert(pa[i]);
????? }????
getPaperForms????????????? 方法??? 返回所有紙張格式的列表,返回以一個回車換行符分隔的字符串
 和getPrinters類似,不同的是getPaperForms是帶參數的,你可以指定獲得那個打印機的紙張類別,沒有參數或者參數為空字符表示獲得當前默認打印機的紙張列表
例如:var ps=pazu.TPrinter.getPaperForms(“HP deskjet 300”);
getDefaultPrinter???????????? 方法??? 獲得默認打印機的對象,返回一個Printer Object
 printToDefaultPrinter????? 方法??? 把要打印的字符串輸送到默認打印機(配合getDefaultPrinter 使用),參數:字符串
通過返回的對象,你可以控制該打印機,調用該打印機的EndDoc等方法,來實現直接輸出內容到打印機
 createPaper???????????????????? 方法??? 按指定的寬度和高度創建自定義紙張
有兩個參數,paperWidth? 和 paperHeight ,參數類型都是數字,單位是厘米。如果你指定的大小的紙張存在,則返回該紙張的名稱,如果不存在,就先創建新的紙張格式并放回新的格式名稱
例如:strDefaultPaper=pazu.TPrinter.createPaper(20,14); //創建20cm*14cm的紙張格式
????? alert('成功創建紙張格式:'+strDefaultPaper);
 doPrint????????????????????????????? 方法??? 執行打印
有一個Boolean的參數,該參數表示是否要彈出打印機選擇對話框
例如:不提示用戶直接打印:
pazu.TPrinter.doPrint(false)
 doPrint_??????????????????????????? 方法??? 執行打印但是不進行頁面參數設置
 和doPrint類似,但是沒有參數,而且執行打印前不去進行頁面參數的設置,也不提示用戶
doPreview??????????????????????? 方法??? 打印預覽 沒有參數
 doPageSetup?????????????????? 方法??? 執行頁面參數的設置 沒有參數
 showPageSetup????????????? 方法??? 彈出頁面設置窗口 沒有參數
 
 
5. 特殊應用
A. 打印指定的frame ,如果我們有多個iframe 或者frame ,我們想打印其中的某一個,怎么辦?
方法一:在要打印的frame中嵌入PAZU,用戶在打印的時候,點擊該frame的打印按鈕
方法二:打印前先用javascript 讓要打印的frame獲得焦點,再調用doPrint(false) 方法
??????? 例子:
window.frames['myifrm'].focus();
pazu.TPrinter.doPrint(false);
B.頁面載入的時候立即打印或者獲得打印機和紙張列表
?? 你可以在<body>的onload事件里面完成你要的工作
C.同一個頁面里面,有些內容,如某個DIV或者按鈕我們不想打印出來,但是屏幕上有需要顯示,怎么辦?
<!-- //設置某些頁面元素不打印,只要在該元素的樣式類class里面添加一個p__就可以了,看myDIV的class-->
<div class="myDIVClass? p__" id="myDIV">這個DIV和"打印試試"按鈕都不會被打印</div>
<input class="p__" name="Button1" type="button" value="打印試試!" οnclick="demo();" style="width: 301px" />
? D.? 連續循環打印?超多超大數據集的打印?
 ????????????? 這種應用有兩種實現方式,要具體看數據的多少。
 ????????????? 1. 如果數據量不大(一個網頁可以把所有要打印的數據顯示出來,雖然網頁要滾動才能顯示,但是生成的HTML體積不大,而且用戶不需要等待太長的時間來生成全部),如:一張出貨單,需要分開多頁打印出來
 ????????????????? 這種情況可以在網頁要分頁的地方 插入 一個css樣式的分頁,打印的時候就會自動分頁打印了。我們的四方在線的憑證打印、賬簿的打印、單據的打印都是采用這種方式。
 ???????????????? 具體實現例子如下:
<!--以下三個div會自動分成三頁打印-->?
<div style="page-break-after:always"> 這是第一頁的內容 </div>?
<div style="page-break-after:always"> 這是第二頁的內容 </div>?
<div style=""> 這是第三頁的內容 </div>?
 ????????????? 2. 如果數據量大,或者程序設計上不能做到一個網頁把所有要打印的內容都容納進來, 例如要打印10萬個客戶的賬單,賬單的數據在服務器的數據庫中
 ????????????????? 這種需求實際上是通過循環多次載入頁面實現的,你可以動態載入動態頁面來實現,在我們的四方在線軟件里面就有一個按月打印憑證的功能,就是這樣的一種應用方式。
 ???????????????? 具體實現如下:
 ????? 
//假設當前頁面為:thispage.jsp??????
//利用javascript ,打印完成后自己載入下一頁??????
//在頁面中引入PAZU打印控件后,參考一下javascript??????
window.οnlοad=function(){??????
?? //先對頁面參數進行設置??????
? pazu.TPrinter.header="";??????
?? //其他設置,這里省略....??????
?? //執行打印,打印的時候注意不能預覽,也不能提示用戶選擇打印機,而是讓pazu直接輸出到打印機??????
? pazu.TPrinter.doPrint(false);??????
??? //延遲一點時間,讓頁面重新載入下一頁??????
? setTimer("printNextPage();",1000);??????
};??????
function printNextPage(){??????
??? window.location.href="thispage.jsp?pageid=NextPage";??????
}??
6. 保留功能
pazu.TPrinter.writeHTMLtoOfficeFile???? 方法?? 把HTML導出為Office EXCEL或者 Word格式文件
 這個函數可以把頁面直接“打印”為Office的EXCEL或者Word格式,該函數是PAZU為4Fang Laputac平臺所用,詳細的應用請參考LAPUTAC的文檔
PAZU
|--------- appWin???????? 方法???? 舊版本兼容? 
 ?? |--------- doPrint????????? 方法???? 舊版本兼容
 ?? |--------- pageSetup?? 方法???? 舊版本兼容
 ?? |--------- Fly????????????????? 方法???? LAPUTAC平臺專用
 ?? |--------- Run?????????????? 方法????? LAPUTAC平臺專用
 ? └-------- AddObj????????? 方法????? LAPUTAC平臺專用 舊版本兼容
這些方法可以實現把程序從服務器端“漂移”到本地計算機運行,并且實現數據的本地存儲和訪問,也可以訪問和存儲遠程服務器數據
7.特殊現象
參考網上最新資料:http://www.4fang.net/article/2009/7/8/95274_1.html
8. 微軟PrintTemplate技術
參考網上最新資料:http://www.4fang.net/article/2009/8/26/95292_1.html
例如:
假設我們有這樣的WEB打印需求:
 某個WEB軟件工程項目中,生成的WEB頁,WEB頁內容是動態生成的,內容一般會很長,一頁紙肯定是打印不下的,那就必然要碰到分頁打印的問題。
 分頁打印有兩種實現方式:
 1.? 編程實現規范的分頁,前提是我們知道應該在內容的什么地方按頁分割開,這種情況適合規范的表單、報表、帳頁等規范的內容。例如4Fang在線軟件里面的所有單據、賬簿和報表都是這樣的。
 ??? 這種實現方式我們在前面的文章里面已經有介紹,這里就不重復了。
 
 2. 讓瀏覽器自動分頁,這種情況適合于大篇幅的文章等編程人員無法預知和計算應該在哪里分割開的時候。
 ???? 這種情況又可以細分為以下兩種情形:
 ???? 2.1? 沒有頁面頁腳,或者頁面頁腳為無格式純文本,這種情況很容易實現。直接指定頁面頁腳就可以了
 ???? 2.2? 頁眉頁腳需要插入圖形或者HTML、表格等,這種情況就比較復雜一點,需要微軟的PrintTemplate技術了。
 ???????????? 這種情形的應用例程請點這里:  www.4fang.net/article/tech/pazu-pt-demo.htm
 ???????????? 應用例程的打印模板文件(printTemplate URL)為:  http://www.4fang.net/article/tech/pt-test.htm 您可以點擊查看這個網頁,并查看它的源代碼。
三、許可授權
PAZU自2009年6月起采用免費的許可,免費許可碼申請頁面:
http://www.4fang.net/tech/PAZU-LCS/
訪問該網址,提供相應的資料,4Fang會發送許可號碼給您。
注意:
1.我們不許可您更改PAZU的名稱,在頁面引用PAZU時候,也應該使用pazu這個id
2.我們不許可您把控件或者安裝包等已經簽名的文件進行重新簽名,或者去除簽名,否則,我們均視為侵權行為。
如果你要重新簽名,您需要購買PAZU授權。
PAZU的打印控制部分的源代碼4Fang公司也是可以出售的。這方面的需要請聯系4Fang
四、技術支持
PAZU并非4Fang的主營產品,只是作為4Fang在線軟件平臺的一個附屬產品,因此PAZU更多的會為四方在線平臺的應用進行考慮。當然,4Fang會持續升級PAZU組件,由于操作系統補丁升級或者瀏覽器的補丁或者版本升級可能會導致PAZU某些功能不正常,4Fang會適時地更新,但不作任何明示或者暗示的保證。
歡迎大家訪問4Fang的論壇,我們將會在4Fang論壇開辟一個專門的板塊,供大家提問和交流,并反饋相關問題。技術支持我們一般只在論壇里面發布和回復,由于工作安排和時間關系,我們不能為每一個單獨的用戶或者開發者提供一對一的服務(免費前已付費的在服務期內的用戶除外)
總結
以上是生活随笔為你收集整理的无限制免费版,完美您的WEB应用--PAZU在线打印的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 魔改 Typora 主题
- 下一篇: 使用MCP2515和TJA1050构成C
