拆分表到新页面填充的原因是什么?

时间:2017-02-02 10:29:18

标签: java pdf itext

为什么在拆分表到新页面填充/边距是否已更改? 明白了吗: Table

代码:

//Some logic to get data. 
PdfPTable table = new PdfPTable(cols);
    table.setWidthPercentage(100);
    table.setHorizontalAlignment(Element.ALIGN_JUSTIFIED_ALL);

    Phrase headerText = new Phrase(header);
    headerText.setFont(FontFactory.getFont(FontFactory.COURIER_BOLD,14.6f));

    PdfPCell headerRow = new PdfPCell(headerText);
    headerRow.setColspan(7);
    headerRow.setBackgroundColor(BaseColor.LIGHT_GRAY);
    headerRow.setHorizontalAlignment(Element.ALIGN_CENTER);
    headerRow.setPadding(5);

    table.addCell(headerRow);

    Set<Integer> keys = data.keySet();

    double sum = 0;
    for (Integer key : keys) {
     //There data is added in table...
    }

    //generate pdf
    Document document = new Document();
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();


    PdfWriter.getInstance(document,byteArrayOutputStream);
    document.open();
    document.setMargins(5,5,5,5);
    document.add(table);
    document.add(p);
    document.add(paragraph);
    document.addCreationDate();
    document.addTitle("Tenant activity");

    document.close();

    logger.debug("Pdf generated");
    File f = new File("activity.pdf");
    logger.debug("File path: " + f.getAbsolutePath());

如何为每个页面设置与第一页相同的页面 / 页面填充?

1 个答案:

答案 0 :(得分:1)

这是错误的顺序:

document.open();
document.setMargins(5,5,5,5);

这是正确的顺序:

document.setMargins(5,5,5,5);
document.open();

当您打开文档或调用document.newPage()时,会初始化下一页,并且您无法更改页面属性,例如该页面的大小或边距。

因此,如果您更改页面大小或页边距,则这些更改仅在下一个页面上有效,而不是在当前页面上有效。

这是为什么?嗯,这是PDF,一切都是基于页面的,一旦页面初始化,如果你在添加内容时更改这些属性,你会得到一些非常奇怪的副作用。