jsp普通列印很簡單,有很多方式,可以用window.print()這種內建的方法,也可以用組件webBrowser,還可以用ScriptX這樣的第三方組件來實現。這樣的列印都是列印預設的A4,如果碰到到發票的列印要怎麼實現呢?
首先,我們要明白,實現網頁套打,還是用我們現有的方法去實現。
其次,要知道發票的使用的紙張是不一樣的,首先它用的是複寫紙,要實現複寫紙的列印,必須要用針式印表機,這樣才能在二三張複寫出內容來。同時,發票紙張的大小不是我們平常使用的A4紙,那我們就必鬚根據發票紙張的大小自訂紙張。
因為發票的列印是一張發票的空白地方列印我們想要的東西,這就需要我們用CSS來控制列印的距離,可以用table或者div來實現列印內容的定位。在這中間可能會遇到問題,因為印表機都有預設的頁面邊界,如果預設的頁面邊界過大,我們在頁面怎麼調,可能打出來都對不上發票,所以必要的時候還要調一下頁面邊界。當定位好了以後,要考慮發票的連續列印問題了,發票一般都是比A4要小,所以如果多張發票的內容放在頁面上,不加以控制的話,列印出來可能只有第一張能對的上發票。我們使用一個CSS來控制列印的分頁:.PageNext{page-break-after:always;}。
一般發票列印是把內容以及格式用js拼起來,然後放到一個Iframe裡,再列印。
function printActive(newstr){
var headstr ='<html><head><title></title></head><body>';
var footstr = '</body></html>';
newstr = headstr + newstr + footstr;
var ifr = document.createElement_x_x("iframe");//建立iframe
document.body.appendChild(ifr); //添加iframe
var ifrdoc = ifr.contentWindow.document;
//命名
ifr.name='i_frame';
ifr.id='i_frame';
ifrdoc.designMode = "on"; //文檔進入可編輯模式
ifrdoc.open(); //開啟流
ifrdoc.write(newstr); //寫入內容
ifrdoc.close(); //關閉流
ifrdoc.designMode ="off"; //文檔進入非可編輯模式
setTimeout("printIframe()","1"); //延遲1毫秒執行
}
上面的Js就是一種方式,先建立一個Iframe,然後把要列印的內容寫進去,在列印,因為這種列印一般會用到Ajax來從後台取資料,所以Js最後要延遲一毫秒執行,以保證列印的內容可以寫進去。