之前有篇關於LODOP打印超文本表格,兩個樣式相同的表格,出現錯位的情況。
該博文地址:LODOP打印表格錯位的幾種情況
該文試驗了兩種現象,第一種瀏覽器頁面顯示錯位,打印預覽也錯位,第二種瀏覽器頁面表格不錯位,打印預覽卻錯位。
這兩個其實都是和容納table表格的容器有關,也就是樣式有問題的導致的,仔細對比排查樣式,可排查出問題。
想讓樣式不變形,完全按照代碼的寬度,可:在table標簽里添加寬度,單元格里加寬度。這種是不受容器影響的。如下面圖示,按照紙張進行設計表格,而不是瀏覽器。
上面那個博文鏈接中,
1.table表格設置了寬度為100%,單元格不設置寬度,導致內容不同每個單元格寬度不同。
2.table表格設置了寬度為100%,每個單元格設置了具體的寬度,然后實際中,表格整體的寬度還是按照的百分之百,設置的具體寬度並不是固定的,只是按照一定比例進行了放大,布滿了瀏覽器的寬度。
這兩種都導致了單元格錯位。
如果table表格不設置寬度為100%,table表格不設置寬度,單元格設置具體的寬度,測試發現,瀏覽器中確實能正常顯示單元格寬度,增大瀏覽器等沒有問題,但是減小的時候,瀏覽器還是會自動對寬度進行縮小,也就是瀏覽器中的表格是這樣的:table不設置寬度,瀏覽器寬度拖動減小,會自適應一樣的表格寬度本身也會改變,即使每個單元格設置了具體的寬度數值,瀏覽器還是自適用。
如果想要去掉樣式和容器的影響,就是把table標簽本身設置上具體寬度,這樣之后,即使瀏覽器怎么拖動,樣式已經固定了,就不會受瀏覽器樣式影響了。
不受容器影響,也就不會發生內容不同導致的錯位現象。
表格代碼:
<table border=1 cellSpacing=0 cellPadding=0 style="border-collapse:collapse;width:880px;"> <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>
打印代碼:(紙張設置的較小,表格本身的寬度已經超過了紙張)
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(); };
圖示見后面,和后面的合成了一張圖:
修改為固定寬度后,表格不會隨着容器自適用了,如果想保留自適用,可以合成到一個表格里,或者根據紙張重新設計表格。
解決兩個表格自適應導致錯位的方法:
1.合成一個table表格,同一個表格里不會發生單元格錯位。(保留自適用)
2.兩個表格進行重組,設置具體的表格寬度和單元格寬度,根據紙張進行設計。(不受容器影響,保持樣式不變形,不再自適應,適應設計的表格。)
代碼:(根據紙張設計表格),如該紙張寬度是600, LODOP.SET_PRINT_PAGESIZE中的紙張參數,默認單位是0.1mm,也就是紙張是60mm。
表格設計的寬度迎合紙張,可以轉換成pt試試,60*(72/25.4)約等於170pt。然后隨便分配了下每個單元格占的數值,該表格就能固定寬度顯示且能不會超過紙張。
表格代碼:
<table border=1 cellSpacing=0 cellPadding=0 style="border-collapse:collapse;width:170pt;"> <tr> <td style="width:70pt;">分析差異點,因瀏覽器版本不同遵循的html標准不同</td> <td style="width:50pt;">分析差異點</td> <td style="width:20pt;">排查樣式</td> <td style="width:30pt;">在ie下不同版本仿真情況下驗證差異</td> </tr> </table>
圖示:
table加具體寬度,單元格加具體寬度,寬度樣式不受容器的影響,注意寬度超過紙張會不顯示。
根據自己需要的紙張設計表格,如圖,修改表格寬度到紙張能容納的大小。

