【轉】【推廣+說(shuō)明】網(wǎng)頁(yè)打印第三方控件(轉載)

3年前 (2021-07-04)閱讀482回復0
心隨你動(dòng)
心隨你動(dòng)
  • 管理員
  • 發(fā)消息
  • 注冊排名364
  • 經(jīng)驗值235
  • 級別管理員
  • 主題47
  • 回復0
樓主
印刷廠(chǎng)直印加工●彩頁(yè)1000張只需要69元●名片5元每盒-更多產(chǎn)品印刷報價(jià)?聯(lián)系電話(huà):138-1621-1622(微信同號)

  1. 入門(mén)基礎

  PAZU 是一個(gè)ActiveX組件(NP版本是一個(gè)Plugin),本文檔只討論ActiveX版本(IE內核瀏覽器適用),NP版本的說(shuō)明文檔我們將另文發(fā)布。

  PAZU 是一個(gè)已經(jīng)通過(guò)微軟代碼認證簽名的控件,用戶(hù)可以在使用到這個(gè)控件的時(shí)候會(huì )自動(dòng)提示安裝,保證發(fā)布的便利性。

  在你的WEB頁(yè)里面使用<Object>標簽可以引用PAZU控件,如下:

  <object classid="clsid:AF33188F-6656-4549-99A6-E394F0CE4EA4"

021yin.com/4ff/sc_setup.exe”

  id="pazu"

  name="pazu" >

  <param name="License" value="You Need a License from 4Fang"/>

  </object>

  說(shuō)明:<object> 元素是用于嵌入ActiveX的,Flash也是通過(guò)這種方式嵌入到頁(yè)面里面的。

  Classid里面的字符串是指向PAZU的專(zhuān)屬標識,是不能更改的。系統通過(guò)這個(gè)值檢索并載入PAZU控件

  Codebase 是指向用戶(hù)可以下載到PAZU安裝包的網(wǎng)址,如果安裝包在你自己的網(wǎng)站上,你可以更改這個(gè)codebase屬性,使得用戶(hù)可以順利下載安裝PAZU控件。如果這個(gè)網(wǎng)址設置錯誤,IE將不會(huì )提示用戶(hù)下載安裝。

  Id 屬性允許你通過(guò)javascript或者vbscript使用getElementById方法,獲得PAZU控件對象。

  Name屬性和id屬性類(lèi)似

  按我們的免費授權約定,您不應該也不允許更改id 和 name 的值。

  Param 參數,必須有一個(gè)License 的屬性,value 是這個(gè)參數屬性的值。它的意義是4Fang的授權許可。

  您可以向4Fang申請一個(gè)免費的授權,詳細的申請方法請看本文的許可授權章節,你要把你獲得的授權碼填入到Value值里面,PAZU才能正常工作。

  注意:當你用提成免費許可申請。

  2. 屬性和方法

  PAZU內置兩個(gè)對象:TWin 和 TPrinter

  PAZU這個(gè)對象結構的屬性和方法如下:

  PAZU

  |--------- TWin 對象

  | |------------ appWin 方法 隱藏IE菜單、工具條、標題欄、狀態(tài)欄等

  | |------------ MaxWin 方法 窗口最大化

  | |------------ MinWin 方法 窗口最小化

  | └----------- CloseWin 方法 關(guān)閉窗口

  |--------- TPrinter 對象

  | |------------ marginTop 屬性 上邊距

  | |------------ marginBottom 屬性 下邊距

  | |------------ marginLeft 屬性 左邊距

  | |------------ marginRight 屬性 右邊距

  | |------------ footer 屬性 頁(yè)腳

  | |------------ header 屬性 頁(yè)眉

  | |------------ orientation 屬性 整型:紙張方向 1=縱向 2=橫向

  | |------------ paperName 屬性 紙張大小名稱(chēng)

  | |------------ printerName 屬性 打印機名稱(chēng)

  | |------------ isPrintBackground 屬性 是否打印背景 true / false

  | |------------ isZoomOutToFit 屬性 是否縮放以適應大小打印 true / false

  | |------------ printTemplate 屬性 打印模板的URL

  | |------------ copies 屬性 打印份數

  | |------------ range 屬性 頁(yè)面范圍

  | |------------ isCopyByCopy 屬性 是否整份打印結束后再打印下一份 true / false

  | |------------ getDefaultPrinter 方法 獲得默認打印機的對象

  | |------------ printToDefaultPrinter 方法 把要打印的字符串輸送到默認打印機(配合getDefaultPrinter 使用)

  | |------------ getPaperForms 方法 返回所有紙張格式的列表,以vbCrlf 分割

  | |------------ getPrinters 方法 返回一個(gè)打印機列表,以vbCrlf 分割

  | |------------ createPaper 方法 按指定的寬度和高度創(chuàng )建自定義紙張

  | |------------ doPrint 方法 執行打印

  | |------------ doPrint_ 方法 執行打印但是不進(jìn)行頁(yè)面參數設置

  | |------------ doPreview 方法 打印預覽

  | |------------ doPageSetup 方法 執行頁(yè)面參數的設置

  | |------------ showPageSetup 方法 彈出頁(yè)面設置窗口

  | |------------ writeHTMLtoOfficeFile 方法 把HTML導出為Office EXCEL或者 Word格式文件

  | └----------- onlyPrintElementID 屬性(2012-1-2新增) 指定要打印的頁(yè)面元素的ID(IFrame也可),其他元素不會(huì )被打印

  |--------- appWin 方法 舊版本兼容

  |---------doPrint 方法 舊版本兼容

  |--------- pageSetup 方法 舊版本兼容

  |--------- Fly 方法 LAPUTAC平臺專(zhuān)用

  |--------- Run 方法 LAPUTAC平臺專(zhuān)用

  └-------- AddObj 方法 LAPUTAC平臺專(zhuān)用

  版本20130423 添加一個(gè)新事件onafterpazuprint到window對象:

  你可以使用以下語(yǔ)句來(lái)獲得打印完成事件的通知

  window.onafterpazuprint= function(){

  //添加你自己的處理代碼

  特別地:

  1. 此事件只在調用doPrint方法時(shí)而且isPromtUser參數為false時(shí)有效

  如果彈出打印對話(huà)框則本事件不會(huì )觸發(fā).

  2. 當IE在保護模式下工作(您的應用域名或者IP沒(méi)有在"信任區域"里面)時(shí), 本事件不會(huì )起作用

  3. 請注意這個(gè)事件是被添加到 window 對象的, 而不是在PAZU對象中.

  4. 本事件不代表物理打印過(guò)程已經(jīng)完成, 僅代表需要打印的內容已經(jīng)發(fā)送到操作系統的打印服務(wù). 最終打印是否成功是無(wú)從得知,也是不可控制的(例如打印過(guò)程卡紙了或者沒(méi)墨了而導致打印失敗)

  3. TWin對象詳解

  TWin 對象

  |------------ appWin 方法 隱藏IE菜單、工具條、標題欄、狀態(tài)欄等,有一個(gè)bool的參數: appWin(true) appWin(false)

  | 兩者的區別在于是否隱藏標題欄

  |------------ MaxWin 方法 窗口最大化 MaxWin()

  |------------ MinWin 方法 窗口最小化 MinWin()

  └----------- CloseWin 方法 關(guān)閉窗口 CloseWin()

  Javascript實(shí)例代碼:

  //1.把IE窗口變成App窗口,不隱藏標題欄

  pazu.TWin.appWin(false);

  //2.把IE窗口變成App窗口,隱藏標題欄

  pazu.TWin.appWin(true);

  //3.最大化

  pazu.TWin.MaxWin();

  //4.最小化

  pazu.TWin.MinWin();

  //5.關(guān)閉窗口

  pazu.TWin.CloseWin();

  DEMO和實(shí)例網(wǎng)頁(yè)請看目錄下的pazu_twin.html

  4. TPrinter對象詳解

  DEMO和實(shí)例網(wǎng)頁(yè)請看目錄下的pazu_tprinter.html

  marginTop 屬性 上邊距 數據類(lèi)型:數字 單位: 毫米

  marginBottom 屬性 下邊距 數據類(lèi)型:數字 單位: 毫米

  marginLeft 屬性 左邊距 數據類(lèi)型:數字 單位: 毫米

  marginRight 屬性 右邊距 數據類(lèi)型:數字 單位: 毫米

  例子:把上邊距設置為10mm

  pazu.TPrinter. marginTop=10

  footer 屬性 頁(yè)腳 數據類(lèi)型:字符串

  header 屬性 頁(yè)眉 數據類(lèi)型:字符串

  例子:設置頁(yè)眉

  pazu.TPrinter.header=”這是新的頁(yè)眉”

  要取消頁(yè)眉和頁(yè)腳,只要賦給它們一個(gè)空字符串就行了,例如不要頁(yè)眉:

  pazu.TPrinter.header=””

  同時(shí)頁(yè)眉和頁(yè)腳也支持左中右的對齊方式和自動(dòng)用日期、URL、頁(yè)碼等的填充。這方面的信息可以參考IE這方面的相關(guān)文檔

  orientation 屬性 紙張方向 數據類(lèi)型:整數1或者2 , 1=縱向 2=橫向

  例子:設置紙張方向為橫向

  pazu.TPrinter. orientation=2

  paperName 屬性 紙張大小名稱(chēng) 數據類(lèi)型:字符串

  printerName 屬性 打印機名稱(chēng) 數據類(lèi)型:字符串

  這兩個(gè)屬性我們都不要求完全匹配,可以采用左匹配的方式,舉例:

  假設您有兩臺打印機,一臺是 Epson 1600K III ,一臺是 HP Deskjet 300。如果你要制定打印機為 HP Deskjet 300 你有兩種方式:

  方式一:全匹配 pazu.TPrinter. printerName=” HP Deskjet 300”

  方式二:左匹配 pazu.TPrinter. printerName=” HP”

  紙張的大小也是一樣的道理,例如,指定用B5紙:

  pazu.TPrinter. paperName=”B5”

  提示:所有紙張格式和所有打印機的列表都可以通過(guò)pazu的相應方法取得,你還可以自定義紙張的大小。請看本文相應的章節。

  isPrintBackground 屬性 是否打印背景 數據類(lèi)型:Boolean true / false

  isZoomOutToFit 屬性 是否縮放以適應大小打印 數據類(lèi)型:Boolean true / false

  printTemplate 屬性 打印模板的URL

  copies 屬性 打印份數 數據類(lèi)型:整數,默認為1

  range 屬性 頁(yè)面范圍 數據類(lèi)型:字符串

  isCopyByCopy 屬性 是否整份打印結束后再打印下一份 數據類(lèi)型:Boolean true / false

  說(shuō)明:

  copies屬性允許你當前內容打印多份拷貝

  range 你可以指定打印的頁(yè)面,例如:

  只打印1到5頁(yè):pazu.TPrinter.range=”1-5”

  只打印1,3,5,7頁(yè):pazu.TPrinter.range=”1,3,5,7”

  提示:利用range屬性可以實(shí)現雙面打印功能

  printTemplate屬性是打印模板的URL,詳細的內容請參考微軟的printTemplate技術(shù)的說(shuō)明。

  getPrinters 方法 返回一個(gè)打印機列表,返回以一個(gè)回車(chē)換行符分隔的字符串

  例如:獲得所有的打印機

  var ps=pazu.TPrinter.getPrinters();

  //獲得是一個(gè)以回車(chē)換行分隔的字符串

  //alert(ps);

  var pa=ps.split("\r\n");

  for(var i=0;i<pa.length;i++){

  alert(pa[i]);

  getPaperForms 方法 返回所有紙張格式的列表,返回以一個(gè)回車(chē)換行符分隔的字符串

  和getPrinters類(lèi)似,不同的是getPaperForms是帶參數的,你可以指定獲得那個(gè)打印機的紙張類(lèi)別,沒(méi)有參數或者參數為空字符表示獲得當前默認打印機的紙張列表

  例如:var ps=pazu.TPrinter.getPaperForms(“HP deskjet 300”);

  getDefaultPrinter 方法 獲得默認打印機的對象,返回一個(gè)Printer Object

  printToDefaultPrinter 方法 把要打印的字符串輸送到默認打印機(配合getDefaultPrinter 使用),參數:字符串

  通過(guò)返回的對象,你可以控制該打印機,調用該打印機的EndDoc等方法,來(lái)實(shí)現直接輸出內容到打印機

  createPaper 方法 按指定的寬度和高度創(chuàng )建自定義紙張

  有兩個(gè)參數,paperWidth 和 paperHeight ,參數類(lèi)型都是數字,單位是毫米。如果你指定的大小的紙張存在,則返回該紙張的名稱(chēng),如果不存在,就先創(chuàng )建新的紙張格式并放回新的格式名稱(chēng)

  例如:strDefaultPaper=pazu.TPrinter.createPaper(200,140); //創(chuàng )建20cm*14cm的紙張格式

  alert('成功創(chuàng )建紙張格式:'+strDefaultPaper);

  doPrint 方法 執行打印

  有一個(gè)Boolean的參數,該參數表示是否要彈出打印機選擇對話(huà)框

  例如:不提示用戶(hù)直接打?。?/p>

  pazu.TPrinter.doPrint(false)

  doPrint_ 方法 執行打印但是不進(jìn)行頁(yè)面參數設置

  和doPrint類(lèi)似,但是沒(méi)有參數,而且執行打印前不去進(jìn)行頁(yè)面參數的設置,也不提示用戶(hù)

  doPreview 方法 打印預覽 沒(méi)有參數

  doPageSetup 方法 執行頁(yè)面參數的設置 沒(méi)有參數

  showPageSetup 方法 彈出頁(yè)面設置窗口 沒(méi)有參數

  onlyPrintElementID 屬性(2012-1-2新增加) 用于指定打印或者預覽頁(yè)面內的某個(gè)ID的元素,可以是任意元素(IFRAME也可以),除此外的頁(yè)面上的其他內容將不會(huì )被打印。

  如果是IFRAME,請注意:

  A。請務(wù)必注意必須是用一個(gè)域內的網(wǎng)頁(yè),因為IE不允許跨域訪(fǎng)問(wèn)。

  B。IFrame內的網(wǎng)頁(yè)和父頁(yè)面最好是同一個(gè)相對目錄,如果不是同一個(gè)目錄,則Iframe內的圖片引用請使用絕對路徑(或相對于跟目錄)的引用,否則可能無(wú)法正確打印該圖片

  C。本屬性只在');協(xié)議)本屬性是無(wú)效的

  D。使用完成后請最好重置本屬性值為空字符,以釋放資源。

  5. 特殊應用

  A. 打印指定的frame ,如果我們有多個(gè)iframe 或者frame ,我們想打印其中的某一個(gè),怎么辦?

  方法一:在要打印的frame中嵌入PAZU,用戶(hù)在打印的時(shí)候,點(diǎn)擊該frame的打印按鈕

  方法二:打印前先用javascript 讓要打印的frame獲得焦點(diǎn),再調用doPrint(false) 方法

  例子:

  window.frames['myifrm'].focus();

  pazu.TPrinter.doPrint(false);

  B.頁(yè)面載入的時(shí)候立即打印或者獲得打印機和紙張列表

  你可以在<body>的onload事件里面完成你要的工作

  C.同一個(gè)頁(yè)面里面,有些內容,如某個(gè)DIV或者按鈕我們不想打印出來(lái),但是屏幕上有需要顯示,怎么辦?

  <!-- //設置某些頁(yè)面元素不打印,只要在該元素的樣式類(lèi)class里面添加一個(gè)p__就可以了,看myDIV的class-->

  <div class="myDIVClass p__" id="myDIV">這個(gè)DIV和"打印試試"按鈕都不會(huì )被打印</div>

  <input class="p__" name="Button1" type="button" value="打印試試!" onclick="demo();" style="width: 301px" />

  D. 連續循環(huán)打???超多超大數據集的打???

  這種應用有兩種實(shí)現方式,要具體看數據的多少。

  1. 如果數據量不大(一個(gè)網(wǎng)頁(yè)可以把所有要打印的數據顯示出來(lái),雖然網(wǎng)頁(yè)要滾動(dòng)才能顯示,但是生成的HTML體積不大,而且用戶(hù)不需要等待太長(cháng)的時(shí)間來(lái)生成全部),如:一張出貨單,需要分開(kāi)多頁(yè)打印出來(lái)

  這種情況可以在網(wǎng)頁(yè)要分頁(yè)的地方 插入 一個(gè)css樣式的分頁(yè),打印的時(shí)候就會(huì )自動(dòng)分頁(yè)打印了。我們的四方在線(xiàn)的憑證打印、賬簿的打印、單據的打印都是采用這種方式。

  具體實(shí)現例子如下:

  <!--以下三個(gè)div會(huì )自動(dòng)分成三頁(yè)打印-->

  <div style="page-break-after:always"> 這是第一頁(yè)的內容 </div>

  <div style="page-break-after:always"> 這是第二頁(yè)的內容 </div>

  <div style=""> 這是第三頁(yè)的內容 </div>

  2. 如果數據量大,或者程序設計上不能做到一個(gè)網(wǎng)頁(yè)把所有要打印的內容都容納進(jìn)來(lái), 例如要打印10萬(wàn)個(gè)客戶(hù)的賬單,賬單的數據在服務(wù)器的數據庫中

  這種需求實(shí)際上是通過(guò)循環(huán)多次載入頁(yè)面實(shí)現的,你可以動(dòng)態(tài)載入動(dòng)態(tài)頁(yè)面來(lái)實(shí)現,在我們的四方在線(xiàn)軟件里面就有一個(gè)按月打印憑證的功能,就是這樣的一種應用方式。

  具體實(shí)現如下:

  //假設當前頁(yè)面為:thispage.jsp

  //利用javascript ,打印完成后自己載入下一頁(yè)

  //在頁(yè)面中引入PAZU打印控件后,參考一下javascript

  window.onload=function(){

  //先對頁(yè)面參數進(jìn)行設置

  pazu.TPrinter.header="";

  //其他設置,這里省略....

  //執行打印,打印的時(shí)候注意不能預覽,也不能提示用戶(hù)選擇打印機,而是讓pazu直接輸出到打印機

  pazu.TPrinter.doPrint(false);

  //延遲一點(diǎn)時(shí)間,讓頁(yè)面重新載入下一頁(yè)

  setTimer("printNextPage();",1000);

  function printNextPage(){

  window.location.href="thispage.jsp?pageid=NextPage";

  6. 保留功能

  pazu.TPrinter.writeHTMLtoOfficeFile 方法 把HTML導出為Office EXCEL或者 Word格式文件

  這個(gè)函數可以把頁(yè)面直接“打印”為Office的EXCEL或者Word格式,該函數是PAZU為4Fang Laputac平臺所用,詳細的應用請參考LAPUTAC的文檔

  PAZU

  |--------- appWin 方法 舊版本兼容

  |--------- doPrint 方法 舊版本兼容

  |--------- pageSetup 方法 舊版本兼容

  |--------- Fly 方法 LAPUTAC平臺專(zhuān)用

  |--------- Run 方法 LAPUTAC平臺專(zhuān)用

  └-------- AddObj 方法 LAPUTAC平臺專(zhuān)用 舊版本兼容

  這些方法可以實(shí)現把程序從服務(wù)器端“漂移”到本地計算機運行,并且實(shí)現數據的本地存儲和訪(fǎng)問(wèn),也可以訪(fǎng)問(wèn)和存儲遠程服務(wù)器數據

  7.特殊現象

021yin.com/apps/d4/Default.aspx?nodeid=4337

  8. 微軟PrintTemplate技術(shù)

021yin.com/apps/d4/Default.aspx?nodeid=4355

  例如:

  假設我們有這樣的WEB打印需求:

  某個(gè)WEB軟件工程項目中,生成的WEB頁(yè),WEB頁(yè)內容是動(dòng)態(tài)生成的,內容一般會(huì )很長(cháng),一頁(yè)紙肯定是打印不下的,那就必然要碰到分頁(yè)打印的問(wèn)題。

  分頁(yè)打印有兩種實(shí)現方式:

  1. 編程實(shí)現規范的分頁(yè),前提是我們知道應該在內容的什么地方按頁(yè)分割開(kāi),這種情況適合規范的表單、報表、帳頁(yè)等規范的內容。例如4Fang在線(xiàn)軟件里面的所有單據、賬簿和報表都是這樣的。

  這種實(shí)現方式我們在前面的文章里面已經(jīng)有介紹,這里就不重復了。

  2. 讓瀏覽器自動(dòng)分頁(yè),這種情況適合于大篇幅的文章等編程人員無(wú)法預知和計算應該在哪里分割開(kāi)的時(shí)候。

  這種情況又可以細分為以下兩種情形:

  2.1 沒(méi)有頁(yè)面頁(yè)腳,或者頁(yè)面頁(yè)腳為無(wú)格式純文本,這種情況很容易實(shí)現。直接指定頁(yè)面頁(yè)腳就可以了

  2.2 頁(yè)眉頁(yè)腳需要插入圖形或者HTML、表格等,這種情況就比較復雜一點(diǎn),需要微軟的PrintTemplate技術(shù)了。

021yin.com/article/tech/pazu-pt-demo.htm

021yin.com/article/tech/pt-test.htm 您可以點(diǎn)擊查看這個(gè)網(wǎng)頁(yè),并查看它的源代碼。

0
0
收藏0
回帖

【轉】【推廣+說(shuō)明】網(wǎng)頁(yè)打印第三方控件(轉載) 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò )圖片

取消確定

圖片上傳中
編輯器信息
提示信息