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))); } }