【轉】【推廣+說明】網頁打印第三方控件(轉載)

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

  1. 入門基礎

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

  PAZU 是一個已經通過微軟代碼認證簽名的控件,用戶可以在使用到這個控件的時候會自動提示安裝,保證發布的便利性。

  在你的WEB頁里面使用<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>

  說明:<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才能正常工作。

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

  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格式文件

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

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

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

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

  |--------- Fly 方法 LAPUTAC平臺專用

  |--------- Run 方法 LAPUTAC平臺專用

  └-------- AddObj 方法 LAPUTAC平臺專用

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

  你可以使用以下語句來獲得打印完成事件的通知

  window.onafterpazuprint= function(){

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

  特別地:

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

  如果彈出打印對話框則本事件不會觸發.

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

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

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

  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(200,140); //創建20cm*14cm的紙張格式

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

  doPrint 方法 執行打印

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

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

  pazu.TPrinter.doPrint(false)

  doPrint_ 方法 執行打印但是不進行頁面參數設置

  和doPrint類似,但是沒有參數,而且執行打印前不去進行頁面參數的設置,也不提示用戶

  doPreview 方法 打印預覽 沒有參數

  doPageSetup 方法 執行頁面參數的設置 沒有參數

  showPageSetup 方法 彈出頁面設置窗口 沒有參數

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

  如果是IFRAME,請注意:

  A。請務必注意必須是用一個域內的網頁,因為IE不允許跨域訪問。

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

  C。本屬性只在');協議)本屬性是無效的

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

  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="打印試試!" onclick="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.onload=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.特殊現象

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

  8. 微軟PrintTemplate技術

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

  例如:

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

  某個WEB軟件工程項目中,生成的WEB頁,WEB頁內容是動態生成的,內容一般會很長,一頁紙肯定是打印不下的,那就必然要碰到分頁打印的問題。

  分頁打印有兩種實現方式:

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

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

  2. 讓瀏覽器自動分頁,這種情況適合于大篇幅的文章等編程人員無法預知和計算應該在哪里分割開的時候。

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

  2.1 沒有頁面頁腳,或者頁面頁腳為無格式純文本,這種情況很容易實現。直接指定頁面頁腳就可以了

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

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

021yin.com/article/tech/pt-test.htm 您可以點擊查看這個網頁,并查看它的源代碼。

0
0
收藏0
回帖

【轉】【推廣+說明】網頁打印第三方控件(轉載) 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網絡圖片

取消確定

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