在iText 7中添加页眉和页脚,可以通过自定义实现一个PdfPageEvent
的子类来实现。以下是一个示例代码:
import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.events.PdfPageEvent;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.VerticalAlignment;
public class HeaderFooterHandler implements IEventHandler {
protected String header;
protected String footer;
public HeaderFooterHandler(String header, String footer) {
this.header = header;
this.footer = footer;
}
@Override
public void handleEvent(Event event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfDocument pdfDoc = docEvent.getDocument();
PdfPage page = docEvent.getPage();
int pageNumber = pdfDoc.getPageNumber(page);
Rectangle pageSize = page.getPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);
// 添加页眉
Canvas canvas = new Canvas(pdfCanvas, pdfDoc, pageSize);
canvas.showTextAligned(new Paragraph(header), pageSize.getLeft() + 40, pageSize.getTop() - 30, TextAlignment.LEFT, VerticalAlignment.MIDDLE);
// 添加页脚
canvas.showTextAligned(new Paragraph(footer + " - " + pageNumber), pageSize.getRight() - 40, pageSize.getBottom() + 30, TextAlignment.RIGHT, VerticalAlignment.MIDDLE);
pdfCanvas.release();
}
}
然后,在创建PDF文档时,将自定义的HeaderFooterHandler
实例添加到PdfDocument
中:
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
public class AddHeaderFooterExample {
public static void main(String[] args) {
String header = "这是页眉";
String footer = "这是页脚";
PdfDocument pdfDoc = new PdfDocument(new PdfWriter("output.pdf"));
Document doc = new Document(pdfDoc);
// 添加页眉和页脚处理器
pdfDoc.addEventHandler(PdfDocumentEvent.START_PAGE, new HeaderFooterHandler(header, footer));
// 添加内容到PDF文档
doc.add(new Paragraph("这是第一页的内容"));
doc.add(new AreaBreak());
doc.add(new Paragraph("这是第二页的内容"));
doc.close();
}
}
这样,生成的PDF文档中每一页都会有相应的页眉和页脚。你可以根据需要自定义页眉和页脚的内容和样式。
领取专属 10元无门槛券
手把手带您无忧上云