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 版本的行为是有道理的。
我们已经生成了横向模式的 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 版本的行为是有道理的。