古詩詞大全網 - 個性簽名 - JS-壹個打印word的程序

JS-壹個打印word的程序

JS-打印word的模板程序

做項目經常見面嗎?打印表格?本文介紹了我用過的打印方法。

首先,相對簡單的方法是將word保存為html文件。分析如下:

1.首先我們需要在office中用wrod繪制文件的模板,然後保存為thm網頁。

2.將其更改為壹個jsp頁面,這樣我們就可以在文件的後面使用傳入的變量值。這時候就是我們傳統的jsp方法,在後臺定義參數,然後在前臺獲取參數,在需要顯示的地方寫入變量值。

3.對於表,我們可以通過循環來控制。

4,這樣做比較簡單,缺點是word模板不能修改。壹旦表格稍有改動,我們的工作量就不小了,因為word轉換後的代碼很難閱讀,在代碼中控制其樣式也是相當困難的,所以不推薦這種做法。

(註:1。在制作模板時,我們可以先定義變量值需要顯示的地方的值,然後在jsp中直接替換。

2.在jsp頁面中,首先添加?& lt% @ page content type = " application/ms word;charset=UTF-8"% >?,將此頁面標識為word文件。

3.如果需要點擊,直接打開word文件而不是彈出?保存,打開?對話框,需要刪除嗎?xmlns:w = " urn:schemas-Microsoft-com:office:office "?只是代碼。

下面介紹另壹種比較常用的方法。這種方法的好處是修改word模板文件不會影響程序。

二、JS控制的打印模式如下:

1.首先畫壹個word模板,插入到需要動態顯示內容的地方。標簽?。方法如下:在word中,選擇要替換的內容-& gt;插入-& gt;書簽,只需為它定義壹個名稱,等等。

2.將模板文件保存為模板點文件。

這就基本夠了,接下來就該後臺代碼播放了。

3.在後臺封裝參數值。

4.調用JS函數進行打印。

為了更直觀的介紹,這裏有壹個完整的例子。

先貼代碼:

1,JS模板文件,適用範圍:

A.根據文檔文件,所有要顯示的內容都被定義為書簽。

B.純表格文檔。如果您在多個表格或表格中嵌套表格,則需要稍微修改它們。

C.文檔和表格混合搭配。

代碼如下:

/* * *獲取文件模板的目錄* @ param { } filename * @ return { } */function getfiletemplatepath(filename){ var path = "/page/print template/"+filename+"。點”;var URL = " http://"+window . location . hostname+":"+window . location . port+this . getcontextpath()+path;返回url}/* * *調出word模板,給label賦值* @ param { } JSON obj JSON object * @ param { } fileName打開word文件名*/函數打印Word (JSON OBJ,fileName){ var Word = New ActiveX object(" Word。應用”);詞。可見=真;var URL = this . getfiletemplatepath(文件名);詞。documents . add(URL)for(I = 0;我& ltJSON obj . length;i++){ if ((jsonObj[i])。正文)!="list"){ range=word。active document . Bookmarks(JSON obj[I].正文)。範圍;range.text=jsonObj[i]。價值;}else{ var myTable=word。active document . Tables(1);var rowsCount = myTable。行數。計數;var iRow = 2;for(j = 0;j & ltJSON obj[I]. value . length;j++){ if(iRow & gt;rowsCount){ myTable。rows . Add();} var length = jsonObj[i]。值[j]。長度;for(var k = 0;k & lt長度;k++){ myTable。行(iRow)。cells(k+1). range . text = JSON obj[I]。值[j][k]。價值;} irow++;} } }字。可見=真;}

2.當妳看到代碼的時候,妳就會明白這段代碼需要壹個JSON類型的參數。

接下來就是在JSON上做文章了。附加後臺代碼(封裝的JSON,java)

類:PrintJSONObjectSet

導入org . JSON . JSON array;導入org . JSON . JSON object;公共類PrintJSONObjectSet { private JSON array ja;public PrintJSONObjectSet(){ ja = new JSON array();} public JSON array getjson array(){ return ja;}公共JSONObject json(Object key,Object value)拋出異常{ JSON Object jo = new JSON Object();值= " "。equals(value)| | value = = null " ":value;jo.put("text ",key);jo.put("value ",值);返回jo;} public void put(Object key,Object value)拋出異常{ ja.put(json(key,value));} public void put(Object obj){ ja . put(obj);} }

如何打印包裝:

/* * *打印出國證明* @ return * @ throws exception */public string printchuguojingzhenging()throws exception { JSON Array ja = new JSON Array();group info group = this . getgroup info();string[]country = this . get country();如果(國家!= null){ for(int c = 0;c & lt國家.長度;c++){ PrintJSONObjectSet js = new PrintJSONObjectSet();SeedGroupRef seed = seed impl . getczcz(getGroupInfoId()、countries[c]);js.put("year ",seed . getfile year());js.put("fileNum ",seed . getfilenum());js.put("leader ",group . get leader());js.put("groupCount ",group . getgroup count());js.put("country ",country[c]);js.put("dispCode ",getDispCode());js.put("printYear ",datefunc . get print year());js.put("printMonth ",datefunc . getprintmount());js.put("printDay ",datefunc . getprintday());PrintJSONObjectSet js2 = new PrintJSONObjectSet();列表& ltMemberInfo & gtmember list = this . getissefmembers();MemberInfo成員;for(int I = 0;我& ltmember list . size();i++){ PrintJSONObjectSet js3 = new PrintJSONObjectSet();member = member list . get(I);js3.put("name1 ",member . getname());js3.put("passportNum1 ",member . getpassportnum());if(++ I & lt;member list . size()){ member = member list . get(I);js3.put("name2 ",member . getname());js3.put("passportNum2 ",member . getpassport num());} js2 . put(js3 . getjsonarray());} js.put("list ",js2 . getjsonarray());ja . put(js . getjsonarray());} } PrintWriter outsystem . out . println(ja . tostring());請嘗試{ out = response . get writer();out . print(ja . tostring());out . close();} catch(Exception e){ e . printstacktrace();}返回null}

JSON的描述:

1,最外層是壹個JSONArray,這個JSON包含多個JSON arras,控制文檔的數量。

2.在第二層JSONArray中,有多個JSONObject。其中每個JSONObject包含壹個JSONObject對象。

每個JSONObject都以{"text":"name "," value ":"張三" }的形式存儲。

3.遇到表時,在第二個JSONArray中封裝了{"text": "list "," value": [{"text ":"," value:" "}]的形式。

也就是說,此時JSONObject的值必須是list,只有這樣才能在JSON中作為表格輸入。

其中,JSONObject對象命名列表包含多個JSONArray來控制行數。

每個JSONArray包含多個類型為Article 2的JSONObject對象,用於控制列數。

調用方法:(使用aJax)

延伸文件系統Ajax.request({ url : href,success : function(response,options){ var responseText = response . responseText;var JSON obj = eval('('+responseText+')');for(var I = 0;我& ltJSON obj . length;i++){ printWord(jsonObj[i],' chuGuoJingZhengMing ');} },失敗:函數(響應,選項){ alert("fail!");} });

示例中的Word文件:

如果有多個國家,將打印多個文件。

代碼描述:

在後臺代碼封裝中,我們把書的簽名和值封裝成壹個JSON對象,這樣JS處理就方便了,也不用把每個書簽的名字壹個個寫出來讓他們找然後賦值。

在後臺代碼中,當我在這裏打印時,我需要根據國家確定要打印的文檔數量。如果是多個國家,我需要打印多個文檔,就在後臺打包,在最外層加壹個JSONArray,在JS裏加壹個loop,可以根據需要自己調整。

在特殊情況下,我們需要分別處理,比如在多個表的情況下,或者嵌套表的情況下。

讓我們來談談嵌套表,如果妳有嵌套表對象的話。

如:var my table = word . active document . tables(1)。行數(1)。單元格(1)。表格(1);

這裏得到的是文檔中第壹個表格的第壹行的每壹列中的每個表格對象,依此類推。

範圍=單詞。activedocument書簽(“名稱”)。Range的意思是將文檔中的書簽名作為?名字?的對象。

range.text=?張三?分配給張三。

這裏使用點文件,因為點文件存在於服務器上。如果以doc文件作為模板文件,那麽多人訪問時線程會被鎖定,所以使用dot文件。

附加生成的JSON字符串:

[[{"text": "year "," value": 2011},{"text": "filenum "," value": 5},{"text": "leader "," value ":"彭贊。{"text":"country "," value ":"Russia "},{"text ":"dispcode "," value ":"dispcode "},{"text ":"printyear "," value ":"20165438+。" value": "04"},{"text": "printday "," value": "07"},{"text": "list "," value": [{"text": "name 1 "," value ":" Peng \ " " value ":":" name2 "," value ":"郭" },{"text ":"passport num2 "," value ":"}],[{"text": "name 1 "," value" {"text": "passport[{"text": "year "," value": 2011},{"text": "filenum "," value": 7},{"text": "leader "," value": "Peng Zan "。{"text":"country "," value ":"Korea "},{"text ":"dispcode "," value ":"dispcode "},{"text ":"printyear "," value ":"20165438+"value": "04"},{"text": "printday "," value": "07"},{"text": "list "," value": [{"text": "name 1 "," value ":" Peng \ " " value ":":" name2 "," value ":"郭" },{"text ":"passport num2 "," value ":"}],[{"text": "name 1 "," value" {"text": "passport num