推荐语
本文介绍了如何使用iText编程库为PDF文档添加自定义的页眉和页脚。通过指定位置、大小、字体和颜色等属性,你可以将文本、图像或其他元素添加到每一页的固定位置,实现专业、可读的自定义页眉和页脚效果。这对于需要批量处理大量PDF文档或需要更精细控制的用户来说非常适用。文章提供了详细的代码示例和依赖配置,帮助你快速上手。如果你想要为PDF文档添加页眉和页脚,这篇文章会给你带来很大的帮助。
掌握iText:轻松处理PDF文档-基础篇-CSDN博客
掌握iText:轻松处理PDF文档-进阶篇-CSDN博客
掌握iText:轻松处理PDF文档-高级篇-添加水印-CSDN博客
掌握iText:轻松处理PDF文档-高级篇-加密和解密-CSDN博客
需求描述
在日常工作或学习中,经常会遇到需要给 PDF 文档添加页眉或页脚的需求。无论是为了提高文档的专业性和可读性,还是为了标识文档的来源和版本信息,添加页眉或页脚都是很常见的操作。
为了实现这一目标,你可以选择使用 PDF 编程库(如iText、Apache PDFBox等),通过编写代码来自定义页眉或页脚的内容和样式。通过指定位置、大小、字体和颜色等属性,你可以将文本、图像或其他元素添加到每一页的固定位置,实现自定义的页眉或页脚效果。这种方法非常适用于那些需要批量处理大量 PDF 文档或希望进行更精细控制的用户。
iText的依赖
在maven的pom.xml中配置:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
添加页眉和页脚
- 创建一个 Document 对象,这个对象代表了一个 PDF 文档。
Document document = new Document();
- 创建一个 PdfWriter 对象,并将其与 Document 对象关联;PdfWriter 用于将内容写入到 PDF 文档中,并指定输出路径。
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("e:/pdf-test/test-v3.pdf"));
- 创建一个自定义的事件处理器 MyHeaderFooter,并将其设置为 PdfWriter 的页面事件处理器;MyHeaderFooter 是一个实现了 PdfPageEventHelper 类的内部类,通过重写 onStartPage 和 onEndPage 方法来实现自定义的页眉和页脚内容。
MyHeaderFooter headerFooter = new MyHeaderFooter();
writer.setPageEvent(headerFooter);
- 打开文档:开始写入内容之前,需要先打开文档。
document.open();
- 使用循环向文档中添加内容:这里使用了一个简单的循环,向文档中添加三个段落。在每个段落之间,通过 Paragraph("\n\n") 添加了两个空行。如果不是最后一页,使用 document.newPage() 方法添加一个新的页面。
for (int i = 0; i < 3; i++) {
// 添加空行
Paragraph elements1 = new Paragraph("\n\n");
document.add(elements1);
// 添加段落
Paragraph elements = new Paragraph("nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. ");
document.add(elements);
// 如果不是最后一页,添加新页
if (i != 2) {
document.newPage();
}
}
- 关闭文档:写入内容完成后,需要关闭文档。
document.close();
- MyHeaderFooter 类实现了 PdfPageEventHelper 类,并重写了 onStartPage 和 onEndPage 方法来自定义页眉和页脚的内容。
- onStartPage 方法在每个新页面开始时调用,用于添加自定义的页眉内容。这里使用
ColumnText.showTextAligned()
方法将文本居中显示在页面顶部。 - onEndPage 方法在每个页面结束时调用,用于添加自定义的页脚内容。这里使用
ColumnText.showTextAligned()
方法将文本居中显示在页面底部,并包含当前页码信息。
- onStartPage 方法在每个新页面开始时调用,用于添加自定义的页眉内容。这里使用
通过以上代码,可以生成一个包含自定义页眉和页脚的 PDF 文档。在每个页面的顶部会显示 "My Header",而底部会显示 "My Footer - Page X"(X 表示当前页码)。
下面是完整的示例:
@Test
public void test3() {
Document document = new Document();
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("e:/pdf-test/test-v3.pdf"));
// 设置事件处理器
MyHeaderFooter headerFooter = new MyHeaderFooter();
writer.setPageEvent(headerFooter);
document.open();
for (int i = 0; i < 3; i++) {
Paragraph elements1 = new Paragraph("\n\n");
document.add(elements1);
Paragraph elements = new Paragraph("nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. ");
document.add(elements);
if (i != 2) {
document.newPage();
}
}
document.close();
} catch (DocumentException | IOException e) {
e.printStackTrace();
}
}
private static class MyHeaderFooter extends PdfPageEventHelper {
@Override
public void onStartPage(PdfWriter writer, Document document) {
System.out.println("-");
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER,
new Phrase("My Header"), (document.right() - document.left()) / 2, document.top() - 20, 0);
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
System.out.println("--");
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER,
new Phrase("My Footer - Page " + writer.getPageNumber()), (document.right() - document.left()) / 2, document.bottom() + 30, 0);
}
}
写在最后
如果你喜欢本文介绍的如何使用iText编程库为PDF文档添加自定义的页眉和页脚,那么请不要忘记给这篇文章点赞和收藏哦!我们会继续为你带来更多实用的技术教程和开发经验,让你在工作中更加得心应手!同时,也欢迎你分享本文给更多的朋友和同事,让他们也能够受益于我们的技术内容。感谢你的支持和关注!