table header 在 pdf 中使用 itextpdf5.1.1 显示,但在 itextpdf5.5.3 中不显示

table header in pdf getting displayed using itextpdf5.1.1 but not in itextpdf5.5.3

我们已经生成了横向模式的 pdf,其中 header 和页脚作为 pdf 的一部分。 header table 和页脚使用 itextpdf5.1.1 jar 在 pdf 中显示良好。但是,当我们将 jar 更新到 5.5.3 时,header table 不显示,仅显示页脚。下面是代码片段。

document = new Document(PageSize.A4.rotate(), 20, 20, 75, 20);

PdfCopy copy = new PdfCopy(document, new FileOutputStream(strPDFFile));
document.open();
PdfReader pdfReaderIntermediate =
    new PdfReader(strIntermediatePDFFile);
numberOfPages = pdfReaderIntermediate.getNumberOfPages();
Font ffont = new Font(Font.FontFamily.UNDEFINED, 7, Font.NORMAL);
System.out.println("###### No. of Pages: " + numberOfPages);
for (int j = 0; j < numberOfPages; ) {
    page = copy.getImportedPage(pdfReaderIntermediate, ++j);
    stamp = copy.createPageStamp(page);
    Phrase footer =
        new Phrase(String.format("%d of %d", j, numberOfPages), ffont);
    ColumnText.showTextAligned(stamp.getUnderContent(),
                               Element.ALIGN_CENTER, footer,
                               (document.right() - document.left()) /
                               2 + document.leftMargin(),
                               document.bottom() - 10, 0);
    if (j != 1) {
        headerTable = new PdfPTable(2);
        headerTable.setTotalWidth(700);
        headerTable.getDefaultCell().setFixedHeight(10);
        headerTable.getDefaultCell().setBorder(Rectangle.NO_BORDER);
        headerTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
        headerTable.addCell(new Phrase(String.format(header1), ffont));
        headerTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
        headerTable.addCell(new Phrase(String.format(header2), ffont));
        headerTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
        headerTable.addCell(new Phrase(String.format(header3), ffont));
        headerTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
        headerTable.addCell(new Phrase(String.format(header5, j),
                                       ffont));
        headerTable.completeRow();
        headerTable.writeSelectedRows(0, 5, 60.5f, 550,
                                      stamp.getUnderContent());


    }


    stamp.alterContents();
    copy.addPage(page);

}
document.close();

当我们将 jar 从 5.1.1 更改为 5.5.3 时,header 丢失了。可能需要更改我们为新 jar 调用 header 的方式。

我们将不胜感激任何意见。 谢谢

您的单元格具有默认填充(即 2)和高度 10,并且您尝试在高度 7 处插入文本。但是 2(上边距)+ 7(文本高度)+ 2(下边距)= 11,即超过您的单元格高度 10。因此,文本不适合并且不显示。

您可以通过以下任一方法解决此问题

  • 使用较小的字体,例如6,或
  • 使用更高的单元格,例如11,或
  • 使用较小的填充,例如1:

    headerTable.getDefaultCell().setPadding(1);
    

通过任何这些更改,您的 header 显示。

我不知道 iText 5.1.1 以何种方式处理这个问题,但当前 iText 版本的行为是有道理的。