掌握iText:轻松处理PDF文档-高级篇-添加页眉和页脚

++++

推荐语

本文介绍了如何使用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中配置:

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 文档。
java 复制代码
Document document = new Document();
  • 创建一个 PdfWriter 对象,并将其与 Document 对象关联;PdfWriter 用于将内容写入到 PDF 文档中,并指定输出路径。
java 复制代码
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("e:/pdf-test/test-v3.pdf"));
  • 创建一个自定义的事件处理器 MyHeaderFooter,并将其设置为 PdfWriter 的页面事件处理器;MyHeaderFooter 是一个实现了 PdfPageEventHelper 类的内部类,通过重写 onStartPage 和 onEndPage 方法来实现自定义的页眉和页脚内容。
java 复制代码
MyHeaderFooter headerFooter = new MyHeaderFooter();
writer.setPageEvent(headerFooter);
  • 打开文档:开始写入内容之前,需要先打开文档。
java 复制代码
document.open();
  • 使用循环向文档中添加内容:这里使用了一个简单的循环,向文档中添加三个段落。在每个段落之间,通过 Paragraph("\n\n") 添加了两个空行。如果不是最后一页,使用 document.newPage() 方法添加一个新的页面。
java 复制代码
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();
    }
}
  • 关闭文档:写入内容完成后,需要关闭文档。
java 复制代码
document.close();
  • MyHeaderFooter 类实现了 PdfPageEventHelper 类,并重写了 onStartPage 和 onEndPage 方法来自定义页眉和页脚的内容。
    • onStartPage 方法在每个新页面开始时调用,用于添加自定义的页眉内容。这里使用 ColumnText.showTextAligned() 方法将文本居中显示在页面顶部。
    • onEndPage 方法在每个页面结束时调用,用于添加自定义的页脚内容。这里使用 ColumnText.showTextAligned() 方法将文本居中显示在页面底部,并包含当前页码信息。

通过以上代码,可以生成一个包含自定义页眉和页脚的 PDF 文档。在每个页面的顶部会显示 "My Header",而底部会显示 "My Footer - Page X"(X 表示当前页码)。

下面是完整的示例:

java 复制代码
@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文档添加自定义的页眉和页脚,那么请不要忘记给这篇文章点赞和收藏哦!我们会继续为你带来更多实用的技术教程和开发经验,让你在工作中更加得心应手!同时,也欢迎你分享本文给更多的朋友和同事,让他们也能够受益于我们的技术内容。感谢你的支持和关注!

相关推荐
向前看-30 分钟前
验证码机制
前端·后端
xlsw_31 分钟前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹1 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭2 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫2 小时前
泛型(2)
java
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
南宫生2 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石2 小时前
12/21java基础
java
李小白662 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp3 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea