如何在iTextpdf中设置表格显示

时间:2015-06-30 18:56:23

标签: itextpdf

我有一个应用程序,我想在表格设置中打印像文档一样的发票。表中的每一行都来自数据库中的单独文档。通过Db的迭代不是问题,但我希望它显示如下: Rough table layout

如果有任何不同,我可以提前确定表格中的总行数。有没有人用一段代码作为起点?

1 个答案:

答案 0 :(得分:1)

请查看SimpleTable11示例以及运行该代码时创建的PDF:simple_table11.pdf

enter image description here

由于您需要不同类型的PdfPCell实例(没有/有粗边框,有/没有,colspan,左/右对齐),您将从编写辅助方法中受益:

public PdfPCell createCell(String content, float borderWidth, int colspan, int alignment) {
    PdfPCell cell = new PdfPCell(new Phrase(content));
    cell.setBorderWidth(borderWidth);
    cell.setColspan(colspan);
    cell.setHorizontalAlignment(alignment);
    return cell;
}

使用此方法可以使您的代码更易于阅读和维护。

这是我们创建文档并添加表格的方式:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    PdfPTable table = new PdfPTable(5);
    table.setWidths(new int[]{1, 2, 1, 1, 1});
    table.addCell(createCell("SKU", 2, 1, Element.ALIGN_LEFT));
    table.addCell(createCell("Description", 2, 1, Element.ALIGN_LEFT));
    table.addCell(createCell("Unit Price", 2, 1, Element.ALIGN_LEFT));
    table.addCell(createCell("Quantity", 2, 1, Element.ALIGN_LEFT));
    table.addCell(createCell("Extension", 2, 1, Element.ALIGN_LEFT));
    String[][] data = {
        {"ABC123", "The descriptive text may be more than one line and the text should wrap automatically", "$5.00", "10", "$50.00"},
        {"QRS557", "Another description", "$100.00", "15", "$1,500.00"},
        {"XYZ999", "Some stuff", "$1.00", "2", "$2.00"}
    };
    for (String[] row : data) {
        table.addCell(createCell(row[0], 1, 1, Element.ALIGN_LEFT));
        table.addCell(createCell(row[1], 1, 1, Element.ALIGN_LEFT));
        table.addCell(createCell(row[2], 1, 1, Element.ALIGN_RIGHT));
        table.addCell(createCell(row[3], 1, 1, Element.ALIGN_RIGHT));
        table.addCell(createCell(row[4], 1, 1, Element.ALIGN_RIGHT));
    }
    table.addCell(createCell("Totals", 2, 4, Element.ALIGN_LEFT));
    table.addCell(createCell("$1,552.00", 2, 1, Element.ALIGN_RIGHT));
    document.add(table);
    document.close();
}

正如您所说,您已经有代码循环数据库中的记录,我使用二维String数组模仿这些记录。

关于表格还有很多话要说,但在发布任何其他问题之前,请阅读免费电子书{{3中的表格表格事件部分}}