LODOP中WEB頁面打印表格錯位的幾種情況
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
在網(wǎng)頁設(shè)計中,表格經(jīng)常用到百分比,表格在瀏覽器中展示,這個百分比是相對于瀏覽器的。 表現(xiàn)為不同紙張效果不同,表格寬度和列寬不同,有時候自定義紙張沒有生效,導(dǎo)致同一個任務(wù)同樣代碼,紙張之間有差異,可打區(qū)域有差異,就會影響樣式。 (由于該問題在ie瀏覽器打開直接查看表格是沒有錯位的,只在lodop語句的時候錯位,所以容易被忽視,這個其實也是css樣式問題,拖動瀏覽器大小其實也是能看到錯位現(xiàn)象的。只是由于用ie直接打開是正常的無錯位,所以經(jīng)常被誤認為樣式?jīng)]有問題。)要大范圍的拖動,并且第一個單元格的內(nèi)容導(dǎo)致了換行。一個換行一個沒有換行,這兩個樣式一樣的表格就會錯位。 該問題可能和瀏覽器解析有關(guān),實際單元格寬度沒有完全生效,但是表格又設(shè)置了100%,拖動也影響了單元格。這個問題排查了一段時間才找到這個現(xiàn)象,感覺比較奇怪,可能和瀏覽器樣式的優(yōu)先級機制等有關(guān)。兩個相同的表格,表格大小都是100%,樣式一樣,單元格寬度設(shè)置的也是一樣的,算是樣式一模一樣的表格,但是根據(jù)內(nèi)容差異,寬度拖動小導(dǎo)致其中一個表格換行,寬度增大不會錯位都是一行,這個錯位是瀏覽器寬度拖動的越能看出錯位。 解決方法:1.盡量統(tǒng)一成一個表格。 不受容器影響的tabe樣式:table標簽本身加固定的寬度,每個單元格加固定的寬度。(這種容器怎么辦,表格和單元格寬度都不會變)可查看相關(guān)博文:如何固定table表格寬度,樣式不受容器影響(注意,寬度固定后,不能自適應(yīng)紙張,寬度超過紙張不會顯示,可根據(jù)紙張進行設(shè)計表格,而不是根據(jù)瀏覽器) 隨著紙張不同,錯位的程度也不同,和瀏覽器窗口改變導(dǎo)致的錯位一樣。 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>WEB打印控件LODOP</title> <script language="javascript" src="LodopFuncs.js"></script> </head> <body> <div id="div1"> <table border=1 width="100%" style="border-collapse:collapse;text-align:center;"> <tr> <td>分析差異點,因瀏覽器版本不同遵循的html標準不同,</td> <td>條形碼</td> <td>LODOP</td> <td>css樣式等盡量使用pt等絕對單位,不使用px等相對單位</td> </tr> </table> <table border=1 width="100%" style="border-collapse:collapse;text-align:center;"> <tr> <td>分析差異點,因瀏覽器版本不同遵循的html標準不同,造成某些標簽屬性顯示有差異</td> <td>條形碼</td> <td>LODOP</td> <td>css樣式等盡量使用pt等絕對單位,不使用px等相對單位</td> </tr> </table> </div> <a href="javascript:prn1_preview()">600*1600紙張</a><br> <a href="javascript:prn2_preview()">1200*1000紙張</a><br> <script language="javascript" type="text/javascript"> var LODOP; //聲明為全局變量 function prn1_preview() { LODOP=getLodop(); LODOP.PRINT_INIT(""); LODOP.SET_PRINT_PAGESIZE(1,600,1600,""); LODOP.ADD_PRINT_HTM(0,0,"100%","100%",document.getElementById("div1").innerHTML); LODOP.PRINT_DESIGN(); // LODOP.PREVIEW(); }; function prn2_preview() { LODOP=getLodop(); LODOP.PRINT_INIT(""); LODOP.SET_PRINT_PAGESIZE(1,1200,1000,""); LODOP.ADD_PRINT_HTM(0,0,"100%","100%",document.getElementById("div1").innerHTML); //LODOP.PRINT_DESIGN(); LODOP.PREVIEW(); }; </script> </body> 代碼1的圖示1: 代碼圖示2:瀏覽器頁面不錯位,LODOP預(yù)覽發(fā)生錯位。(雖然兩個表格樣式一樣,但是其中一個由于總寬度縮小導(dǎo)致了換行,兩個表格發(fā)生錯位) 代碼 : <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>WEB打印控件LODOP</title> <script language="javascript" src="LodopFuncs.js"></script> </head> <body> <div id="div1"> <table border=1 cellSpacing=0 cellPadding=0 width="100%" style="border-collapse:collapse;"> <tr> <td style="width:600px;">分析差異點,因瀏覽器版本不同遵循的html標準不同</td> <td style="width:90px;">分析差異點</td> <td style="width:100px;">排查樣式</td> <td style="width:90px;">在ie下不同版本仿真情況下驗證差異</td> </tr> </table> <table border=1 cellSpacing=0 cellPadding=0 width="100%" style="border-collapse:collapse;"> <tr> <td style="width:600px;">分析</td> <td style="width:90px;">分析差異點</td> <td style="width:100px;">排查樣式</td> <td style="width:90px;">在ie下不同版本仿真情況下驗證差異</td> </tr> </table> </div> <a href="javascript:prn1_preview()">600*1600紙張</a><br> <a href="javascript:prn2_preview()">1200*1000紙張</a><br> <script language="javascript" type="text/javascript"> var LODOP; //聲明為全局變量 function prn1_preview() { LODOP=getLodop(); LODOP.PRINT_INIT(""); LODOP.SET_PRINT_PAGESIZE(1,600,1600,""); LODOP.ADD_PRINT_HTM(0,0,"100%","100%",document.getElementById("div1").innerHTML); LODOP.PRINT_DESIGN(); // LODOP.PREVIEW(); }; function prn2_preview() { LODOP=getLodop(); LODOP.PRINT_INIT(""); LODOP.SET_PRINT_PAGESIZE(1,1200,1000,""); LODOP.ADD_PRINT_HTM(0,0,"100%","100%",document.getElementById("div1").innerHTML); //LODOP.PRINT_DESIGN(); LODOP.PREVIEW(); }; </script> </body> 圖示: 該問題也是 css樣式問題,需要排查樣式,用不受容器影響的樣式,或根據(jù)紙張大小,設(shè)定對應(yīng)的樣式,而不是瀏覽器的大小。此外,出現(xiàn)其他樣式問題時,也可用刪減樣式,做小例子等方式排查,個人是(排查方法:)先刪減排查,把能這個問題以最簡單的形式摘取處理,然后做例子對比,找到原因。因為聽說樣式一模一樣,ie打開也正常,但lodop打印發(fā)生錯位,比較奇怪,要了例子來試試,排查了一下,這種樣式確實有這個現(xiàn)象。 進一步測試發(fā)現(xiàn),當table表格加寬度為100%的時候,實際設(shè)置的單元格寬度是無效的,表格抵達了瀏覽器右側(cè)布滿狀態(tài)。 該文章在 2023/9/26 1:02:06 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |