一般我們使用web打印都是把要打印的信息放在一個Iframe 或一個DIV中,傳到打印機中 ,這樣做比較麻煩的是,每次打印都要有個預覽的提示,但是最麻煩的是,頁面的佈局,整個頁面打印出來的效果不好,行距,也邊距,等都不對稱。
網上找了半天發現這個控件組件不錯:
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/
<script>
function SaleSuccess()
{
isprev=false;
var isPromtUser=false;
pazu.TPrinter.marginTop=parseInt("0"); //屬性 上邊距
pazu.TPrinter.marginBottom=parseInt("0"); //屬性 下邊距
pazu.TPrinter.marginLeft=parseInt("0"); //屬性 左邊距
pazu.TPrinter.marginRight=parseInt("0"); //屬性 右邊距
pazu.TPrinter.footer=""; //屬性 頁腳
pazu.TPrinter.header=""; //屬性 頁眉
pazu.TPrinter.orientation=1; //屬性 整型:紙張方向 1=縱向 2=橫向
pazu.TPrinter.paperName="58mm * 自定義長度"; //屬性 紙張大小名稱
// pazu.TPrinter.printerName="Zonerich AB-POS58"; //屬性 打印機名稱
pazu.TPrinter.getDefaultPrinter();
pazu.TPrinter.isPrintBackground=false; //屬性 是否打印背景 true / false
pazu.TPrinter.isZoomOutToFit=true; //屬性 是否縮放以適應大小打印 true / false
pazu.TPrinter.printTemplate=""; //屬性 打印模板的URL
pazu.TPrinter.copies="1"; //屬性 打印份數
pazu.TPrinter.range=""; //屬性 頁面範圍
pazu.TPrinter.isCopyByCopy=false; //屬性 是否整份打印結束後再打印下一份 true / false
window.frames["print_Iframe"].focus();
pazu.TPrinter.doPrint(isPromtUser);
}
</script>
<!--引入PAZU 控件-->
<div style="display:none">
<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>
</div>
其中print_Iframe 是我們需要打印的頁面
. 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 方法 彈出頁面設置窗口 沒有參數