2013年4月5日 星期五

[JavaScript]透過Script直接設定列印邊界

Blog停擺好久!!!原因為前一份工作專案較忙,後來又決定踏入人生第一次轉職,

故一直到最近面試階段才有比較空閒的時間,離題離很大,總之希望Blog接下來能好好經營,

該多花點時間Study之前想碰的新技術了。當然這過程還是有將一些程式記錄在Evernote,

今天要分享在前端直接設定列印邊界的程式,之前的需求是列印的數據要直接印在紙本報表上

當然邊界的設定就很重要,故在列印前就用程式去指定

以免使用者去動過設定,格式整個就會跑掉。

Survey過程中,意外發現兩個套件(IE Only),紀錄一下:

ScriptX為一個前端的套件,透過此套件可以輕易的用Script去操控印表機設定

只要下載套件,將smax.cab加入網站,再於Html指定以下Code:

image

就可輕易的去操控印表機設定,免費版就有以下功能了,還可設定不跳出瀏覽直接Print:

image

當然最後還是沒有採用此Solutions,因在localhost跑得好好的,

未注意到如要放至Server上會無法使用,因需購買License,如是用免費版必須將Domain address寄給作者申請。

另一個套件叫Pazu,是大陸四方在線所開發的套件,他們的網站已有詳細的中文Sample Code了

一樣你可在localhost試用,如覺得不錯用要放在Server的話可再跟作者申請,再這就不詳細說明了

以上兩個套件完了半天都才發現要申請,故最後還是放棄了決定自己Survey,

其實要修改列印邊界,不外乎就是用到IE的ActiveX,故以上兩個套件也是IE Only

邊界設定都存在於Client端的登錄檔,故可用以下程式去修改:

var path = "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; 
var _Reg = new ActiveXObject("WScript.Shell");
_Reg.RegWrite(path+"header",""); //頁首
_Reg.RegWrite(path+"footer",""); //頁尾
_Reg.RegWrite(path+"margin_bottom",parseFloat(10.0)/10/2.54); //登錄檔的單位為公吋
_Reg.RegWrite(path+"margin_left",parseFloat(10.0)/10/2.54);
_Reg.RegWrite(path+"margin_right",parseFloat(10.0)/10/2.54);
_Reg.RegWrite(path+"margin_top,parseFloat(10.0)/10/2.54);


因使用到ActiveX,故IE瀏覽器設定上需將此區域加入信任,


或至IE->網頁網路選項,將ActiveX調為啟用或提示:


image


如此在列印之前就能去將瀏覽器的邊界列印設定改掉~


但後來發現即使邊界設定一樣…不同印表機印出的結果也不一樣…


這就是另一段故事了…我必須針對不同印表機去測試出邊界數據來解決….T_____T

沒有留言:

張貼留言