簡體   English   中英

將頁腳添加到 Java iTextPdf 7 和頁碼

[英]Add footer to Java iTextPdf 7 with page number

我正在嘗試在左側添加包含用戶名的頁腳,在右側添加包含總頁數的頁腳我在 Java 上使用 iTextPdf 7 但我找不到任何有用的方法來做到這一點,請在我的代碼下面找到導入:

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();

頁腳樣本:

這是所需頁腳的示例

這個參考對你有幫助嗎? iTextPdf

一個非常基本的例子,可以完成這項工作。 在 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();

請注意,我使用Paragraph作為頁腳元素,但您可以使用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);
    }
} 

視覺結果:

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM