我试图添加页脚包含左边的用户名和右边的总页数我使用iTextPdf 7在Java但我无法找到任何有用的方法来做到这一点,请在下面找到我的代码导入:
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
代码的小样本:
PdfWriter pdfWriter = new PdfWriter(path);
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
pdfDocument.addNewPage();
Document document = new Document(pdfDocument);
Paragraph dateParagraph = new Paragraph(todayDate.toString());
dateParagraph.setTextAlignment(TextAlignment.RIGHT);
document.add(dateParagraph);
document.close();
页脚样本:
这是所需页脚的示例
完成这项工作的一个非常基本的示例。在iText中添加页脚和页码的方法有很多,根据您的上下文,一种方法可能比其他方法更合适。我提供的示例是一个很好的开始:
Document document = new Document(pdfDocument, PageSize.A4, false);
for (int i = 0; i < 10; i++) {
if (i != 0) {
document.add(new AreaBreak());
}
document.add(new Paragraph("Hello"));
}
int totalPages = document.getRenderer().getCurrentArea().getPageNumber();
for (int i = 1; i <= totalPages; i++) {
Paragraph footer = createFooter(totalPages);
footer.setFixedPosition(i, 40, 40, 300);
document.add(footer);
}
document.close();
请注意,我使用段落
作为页脚元素,但您可以使用Table
或其他任何东西:
private Paragraph createFooter(int totalPages) {
Paragraph p = new Paragraph();
Text currentPage = new Text("");
currentPage.setNextRenderer(new CurrentPageNumberRenderer(currentPage));
p.add("Page ").add(currentPage).add(" of ").add(new Text(String.valueOf(totalPages)));
return p;
}
这是我们的自定义渲染器,它将动态分配页码:
private static class CurrentPageNumberRenderer extends TextRenderer {
public CurrentPageNumberRenderer(Text textElement) {
super(textElement);
}
@Override
public LayoutResult layout(LayoutContext layoutContext) {
int currentPageNumber = layoutContext.getArea().getPageNumber();
setText(String.valueOf(currentPageNumber));
return super.layout(layoutContext);
}
@Override
public IRenderer getNextRenderer() {
return new CurrentPageNumberRenderer((Text) modelElement);
}
}
视觉结果: