iText:创建的表(com.lowagie。文本)仅占整个页面的80%,如何使其利用整个页面

时间:2011-03-10 06:03:00

标签: java pdf itext

我正在编写以下代码,以便创建一个包含表格的PDF文件。

        Document document = new Document(PageSize.A4, 20, 20, 20, 80);
        Font myfont = new Font(FontFactory.getFont(FontFactory.COURIER_BOLD, 13, Font.NORMAL));
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(request.getRealPath("/") + "SAMPLE.pdf"));

        document.open();
        Table table = new Table(2);
        Cell c2 = new Cell();

        int[] widths = {8, 150}; //Tried different values, but no change
        table.setBorder(Rectangle.BOX);
        table.setAlignment(Element.ALIGN_LEFT);
        table.setSpacing(0);
        table.setPadding(0);
        table.setTableFitsPage(true); //Tried with 'false', even removed it, but no change
        table.setWidths(widths);

        c2 = new Cell(new Paragraph("1.     ", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);
        c2 = new Cell(new Paragraph("TEST DATA     ", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);

        c2 = new Cell(new Paragraph("2.     ", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);
        c2 = new Cell(new Paragraph("TEST DATA", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);

        c2 = new Cell(new Paragraph("3.     ", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);
        c2 = new Cell(new Paragraph("TEST DATA", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);

        document.add(table);
        document.close();

但是创建的文件包含一个占据页面大约80-85%的表。我希望它能利用整个页面。

我尝试对代码进行一些调整,例如将table.setTableFitsPage(true);更改为table.setTableFitsPage(false);,甚至尝试删除它。 也改变了指定的宽度。但是在所有情况下它都是徒劳的,它只给了我一个只占80-85%页面的文件。

我是否遗漏了一些要添加到我的代码中的内容,或者是否存在阻止表占用100%页面的属性。

当内容很大时会产生问题,因为我最终得到页面上仍有空格的长表。

附上此处生成的实际PDF文件的屏幕截图!

Screen-shot of the PDF generated

2 个答案:

答案 0 :(得分:1)

您应该重写表格代码以改为使用PdfPTable。你可以找到一些examples of its use online。 iText in Action 2nd ed的第4章是关于表格的,确切地说是PdfPTables。

很多示例代码。享受。

答案 1 :(得分:0)

改为使用PdfPTable类,您可以在整个表上设置列宽。使其跨越整个页面可以通过构建

来完成
float delta = document.getPageSize().getWidth() / numberOfColumns;
// add delta numberOfColumn times
PdfPTable table = new PdfPTable(new float[] {delta, delta, delta, delta });
table.setWidthPercentage(100f);

构造函数中传递的宽度决定了给定列相对于整个表宽度的空间大小。