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

相关推荐
Asthenia041226 分钟前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
bobz96544 分钟前
ovs patch port 对比 veth pair
后端
Asthenia04121 小时前
Java受检异常与非受检异常分析
后端
uhakadotcom1 小时前
快速开始使用 n8n
后端·面试·github
JavaGuide1 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
bobz9651 小时前
qemu 网络使用基础
后端
Asthenia04122 小时前
面试攻略:如何应对 Spring 启动流程的层层追问
后端
Asthenia04122 小时前
Spring 启动流程:比喻表达
后端
Asthenia04122 小时前
Spring 启动流程分析-含时序图
后端
ONE_Gua2 小时前
chromium魔改——CDP(Chrome DevTools Protocol)检测01
前端·后端·爬虫