曾經在上海的時候有開發過服務端連打印機打印文件的功能,用的是java調用服務機上連接的打印機打印pdf文件
String cmd = "cmd.exe /C start acrord32 /P /h " + pdfPath;
Runtime.getRuntime().exec(cmd);
詳見:
Java調用cmd的靜默打印PDF方法
https://blog.csdn.net/ycb1689/article/details/7530210
現在要做的是客戶端調用瀏覽器的打印功能,利用客戶端連接的打印機打印頁面區域,采用的是jquery封裝好的打印插件 jQuery.print.js ,只能說人家都封裝好了,拿來用便可以了,沒什么難點,下面是插件的網址
http://www.jq22.com/jquery-info15650
但是引用到我的項目中后,指定打印的區域為整個table,也就是把table對象拋給插件去封裝,然后打印,但是打印預覽的結果不太理想,當table顯示的行數過多,比如50多行的時候,一頁明顯打不完,但是打印預覽的時候總是顯示總頁數為1
這里選的也是打印全部頁碼,並沒有指定只打印第一頁。一開始以為是插件在封裝我給的table對象的時候是不是漏掉了部分行,還特意設置在新窗口中打印,並在打印完成后不關閉新窗口,就是為了看看插件封裝的table完不完整,后來發現也是完整的
設置在新窗口中打印,就設置下面一個iframe參數為false就可以了
修改代碼,設置打印完成后或者取消打印后,新窗口不關閉。順着代碼調用的入口,找到打印完成后關閉新窗口的代碼,注釋掉下面一行代碼即可
頁面中顯示的table是完整的,於是我在頁面直接右鍵,選擇打印功能,發現也是只打印一頁
而其他頁面直接點擊右鍵打印的時候卻是整個頁面打印,比如下面這個,需要打印11頁
這樣一來問題就確定是出在自己項目了,突然就像打通了任督二脈,記得曾經設置過項目頁面中body的width和height都為100%,一查看,果不其然
問題就出在這里,是插件封裝的時候應用了這個樣式,所以永遠都只會打印一頁。那么只要再封裝的時候沖掉這個樣式,問題就迎刃而解了
這樣問題就解決了。
最后,還發現一個可以去掉頁眉和頁腳的設置,哈哈,這都不算什么大發現了,就是在改這個只能打一頁的bug的時候,點呀點,點到了這個設置,覺得還是蠻有用的,分享給大家吧
點這里的更多設置
里面有個頁眉和頁腳的設置,取消勾選就沒有頁眉和頁腳了