From 37ea54e08853d56bdf074adcc5949e3839ce6f54 Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Fri, 9 Aug 2019 17:42:07 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-20433=20html=E7=89=87=E6=AE=B5=E5=AF=BC?= =?UTF-8?q?=E5=87=BAtable=E8=A1=A8=E6=A0=BC=E8=A2=AB=E5=8E=8B=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../text/html/simpleparser/IncTable.java | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncTable.java b/fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncTable.java index 2ea2a07f1..c971540a1 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncTable.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncTable.java @@ -72,20 +72,20 @@ public class IncTable { public IncTable(HashMap props) { this.props.putAll(props); } - + public void addCol(PdfPCell cell) { if (cols == null) cols = new ArrayList(); cols.add(cell); } - + public void addCols(ArrayList ncols) { if (cols == null) cols = new ArrayList(ncols); else cols.addAll(ncols); } - + public void endRow(float rowHeight) { rowHeights.add(rowHeight); if (cols != null) { @@ -94,27 +94,35 @@ public class IncTable { cols = null; } } - + public ArrayList getRows() { return rows; } - + public PdfPTable buildTable() { if (rows.isEmpty()) return new PdfPTable(1); int ncol = 0; ArrayList c0 = (ArrayList)rows.get(0); ArrayList colWidths = new ArrayList(); + float widthSum = 0; for (int k = 0; k < c0.size(); ++k) { PdfPCell pCell = ((PdfPCell)c0.get(k)); int cellCols = pCell.getColspan(); ncol += cellCols; + //不取 0 ,后面可能需要求比值 + float styleWidth = pCell.getStyleWidth(); if(cellCols > 1){ + float avgWidth = styleWidth / cellCols; + float width = 0 == avgWidth ? 1 : avgWidth; + widthSum = width * cellCols; for(int a = 0; a < cellCols ; a++){ - colWidths.add(pCell.getStyleWidth()/cellCols); + colWidths.add(width); } }else { - colWidths.add(pCell.getStyleWidth()); + float width = 0 == styleWidth ? 1 : styleWidth; + widthSum += width; + colWidths.add(width); } } @@ -132,8 +140,8 @@ public class IncTable { //解析单元格宽度 float totalWidth = CSSUtils.parseFloat(width); float[] floats = new float[colWidths.size()]; - for (int a = 0; a < colWidths.size(); a++){ - floats[a] = colWidths.get(a); + for (int a = 0; a < colWidths.size(); a++) { + floats[a] = totalWidth * colWidths.get(a) / widthSum; } //解析px数值 table.setTotalWidth(totalWidth); @@ -161,11 +169,11 @@ public class IncTable { return table; } - public void processRowHeight(PdfPTable table){ - Float height = CSSUtils.parseFloat((String)props.get("height")); + public void processRowHeight(PdfPTable table) { + Float height = CSSUtils.parseFloat((String) props.get("height")); Float eachHeight = height / table.getRows().size(); //调整行高 - for(int a = 0; a < rowHeights.size(); a++){ + for (int a = 0; a < rowHeights.size(); a++) { table.getRow(a).setStyleHeight(Math.max(eachHeight, rowHeights.get(a))); } }