如何为pdf表ItextPdf Java设置轮廓边框

时间:2016-08-05 10:23:30

标签: java pdf itext

如何使用itext pdf java

设置pdf表的轮廓边框
 ________________________________________
|  cell 1    cell2   cell3    cell4      |                                        
|  cell 5    cell2   cell3    cell4      |                                        
|  cell 9    cell2   cell3    cell4      |                                        
|  cell 1    cell2   cell3    cell4      |                                        
|  cell 1    cell2   cell3    cell4      |                                        
|________________________________________|

1 个答案:

答案 0 :(得分:1)

在iText 7中,请参阅“iText 7:building blocks”教程的Chapter 5,我们在此创建此表:

enter image description here

可以在此处找到代码:CellBorders

Table table2 = new Table(new float[]{2, 1, 1});
table2.setMarginTop(10);
table2.setBorder(new SolidBorder(1));
table2.setWidthPercent(80);
table2.setHorizontalAlignment(HorizontalAlignment.CENTER);
table2.addCell(new Cell(1, 3)
    .add("Cell with colspan 3").setBorder(Border.NO_BORDER));
table2.addCell(new Cell(2, 1)
    .add("Cell with rowspan 2").setBorder(Border.NO_BORDER));
table2.addCell(new Cell()
    .add("row 1; cell 1").setBorder(Border.NO_BORDER));
table2.addCell(new Cell()
    .add("row 1; cell 2").setBorder(Border.NO_BORDER));
table2.addCell(new Cell()
    .add("row 2; cell 1").setBorder(Border.NO_BORDER));
table2.addCell(new Cell()
    .add("row 2; cell 2").setBorder(Border.NO_BORDER));
document.add(table2);

在iText 5中,您必须将所有单元格的所有边框设置为NO_BORDER,并且必须使用表格事件绘制表格的边框。这在“iText in Action - Second Edition”一书的第5章中进行了解释,更具体地说,在PressPreviews示例中。

这是您需要的桌面活动:

public class MyTableEvent implements PdfPTableEvent {
    public void tableLayout(PdfPTable table, float[][] width, float[] height,
            int headerRows, int rowStart, PdfContentByte[] canvas) {
        float widths[] = width[0];
        float x1 = widths[0];
        float x2 = widths[widths.length - 1];
        float y1 = height[0];
        float y2 = height[height.length - 1];
        PdfContentByte cb = canvas[PdfPTable.LINECANVAS];
        cb.rectangle(x1, y1, x2 - x1, y2 - y1);
        cb.stroke();
        cb.resetRGBColorStroke();
    }
}

您可以将此事件声明为如下所示:

table.setTableEvent(new MyTableEvent());

确保单元格没有任何边框!

重要提示:如果您要使用iText开始新项目,则应考虑使用iText 7.正如您所看到的,API已经发生了一些变化。