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

news2024/9/22 16:54:59

推荐语

本文介绍了如何使用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() 方法将文本居中显示在页面底部,并包含当前页码信息。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1311635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于轻量级GhostNet模型开发构建工业生产制造场景下滚珠丝杠传动表面缺陷图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

YOLOv5改进 | 2023卷积篇 | AKConv轻量级架构下的高效检测(既轻量又提点)

一、本文介绍 本文给大家带来的改进内容是AKConv是一种创新的变核卷积&#xff0c;它旨在解决标准卷积操作中的固有缺陷&#xff08;采样形状是固定的&#xff09;&#xff0c;AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状&#xff0c;能够使用任意数量…

***Cpolar配置外网访问和Dashy

Dashy是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制专属导航页工具 结合cpolar内网工具,我们实现无需部署到公网服务器…

Spring Boot 3 整合 WebSocket (STOMP协议) 和 Vue 3 实现实时通信

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

基于 Webpack5 Module Federation 的业务解耦实践

前言 本文中会提到很多目前数栈中使用的特定名词&#xff0c;统一做下解释描述 dt-common&#xff1a;每个子产品都会引入的公共包(类似 NPM 包) AppMenus&#xff1a;在子产品中快速进入到其他子产品的导航栏&#xff0c;统一维护在 dt-common 中&#xff0c;子产品从 dt-com…

【Https】工作流程

HTTPS 也是⼀个应用层协议。是在 HTTP 协议的基础上引入了⼀个加密层。 前言 由于Http是明文传输&#xff0c;因此如果有人想修改/截获数据都是非常容易&#xff0c;因此就出现了运营商劫持问题。 加密基础知识 明文密钥>密文 加密 密文密钥>明文 解密 对称加密和非对…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless模式来袭

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless模式来袭 本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 文章目录 亚马逊云…

jenkins 运行接口自动化测试脚本,安装第三方依赖库的一些总结

之前在做接口自动化时&#xff0c;jenkins 执行 job 安装 requirements.txt 中的第三方依赖库时折腾了许久&#xff0c;网上查的解决方案均未生效&#xff0c;后来找出一条解决方法&#xff0c;做个记录&#xff0c;希望帮助到遇到同样问题的小伙伴。 我们都知道可以通过生成 …

软考机考考试第一批经验分享

由于机考的特殊性&#xff0c;考试环境与传统笔试环境有所不同。下面是与考试环境相关的总结&#xff1a; 草稿纸&#xff1a;考场提供足够数量的草稿纸&#xff0c;每位考生都会分发一张白纸作为草稿纸。在草稿纸上需要写上准考证号。如果不够用&#xff0c;可以向监考老师再次…

Android 11.0 framework关于systemUI状态栏透明背景的功能实现

1.概述 在11.0的系统rom产品定制化开发中,在对于系统原生SystemUI的状态栏背景在沉浸式状态栏的 情况下默认是会随着背景颜色的变化而改变的,在一些特定背景下状态栏的背景也是会改变的,所以由于产品开发需要 要求需要设置状态栏背景为透明的,所以就需要在Activity创建的时…

排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序

排序算法(二) 前面介绍了排序算法的时间复杂度和空间复杂数据结构与算法—排序算法&#xff08;一&#xff09;时间复杂度和空间复杂度介绍-CSDN博客&#xff0c;这次介绍各种排序算法——冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序。 文章目录 排…

web前端之正弦波浪动功能、repeat、calc

MENU 效果图htmlstylecalcrepeat 效果图 html <div class"grid"><span class"line"></span><span class"line"></span><span class"line"></span><span class"line"><…

Python采集知乎专栏文章保存成pdf

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm wkhtmltopdf 软件 – 文末获取 模块使用: requests >>> pip install requests 数据请求 parsel >>> pip install parsel 数据解析 re >>> 内置模块 不需要安装…

linux 防火墙systemctl (个人笔记)

查看 systemctl status firewalld 开启 systemctl start firewalld 关闭 systemctl stop firewalld.service 查看所有 firewall-cmd --zonepublic --list-ports 开放端口&#xff1a;// --permanent 永久生效,没有此参数重启后失效 firewall-cmd --zonepublic --add-port9527/…

[PyTorch][chapter 7][李宏毅深度学习][深度学习简介]

前言&#xff1a; 深度学习常用的开发平台 TensorFlow torch theano caffe DSSTNE mxnet libdnn CNTK 目录&#xff1a; 1&#xff1a; 深度学习发展历史 2&#xff1a; DeepLearning 工程简介 3&#xff1a; DNN 简介 一 发展历史 二 DeepLearning 工程简介 深度学习三…

如何删除/替换3D模型的材质贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 在3D设计和动画领域&#xff0c;材质是呈现真实感和逼真效果的关键因…

从广东到俄罗斯:一段跨越万里的电子消费展之旅

作为一名广东电子消费品行业的从业者&#xff0c;我们经常要奔赴全球不同国家拓展海外业务&#xff0c;而展会就是重要的平台。最近大家在热议的俄罗斯国际消费类电子电器展我参加过一届&#xff0c;跨越万里的旅程&#xff0c;让我深刻体会到了这种国际展览的魅力和挑战。 我参…

Mac部署Odoo环境-Odoo本地环境部署

Odoo本地环境部署 安装Python安装Homebrew安装依赖brew install libxmlsec1 Python运行环境Pycharm示例配置 Mac部署Odoo环境-Odoo本地环境部署 安装Python 新机&#xff0c;若系统没有预装Python&#xff0c;则安装需要版本的Python 点击查询Python官网下载 安装Homebrew 一…

实战——Mac M2 安装mat工具

线上环境出现内存飙升的情况&#xff0c;需要工具定位问题发生点就需要用到mat工具了&#xff0c;之前都是在intel芯片环境上安装的&#xff0c;现在换了m2芯片&#xff0c;导致出现了问题&#xff0c;经过一系列调研都解决了&#xff0c;特此记录下&#xff0c;以备后查 开发…

基于开源的JAVA mongodb jdbc 驱动 使用教程

基于开源的JAVA mongodb jdbc 驱动 使用教程介绍 介绍 本文介绍一款开源的基于JAVA的 Mongodb JDBC 驱动使用教程 开源地址 https://gitee.com/bgong/jdbc-mongodb-driver功能价值 与mybaits融合&#xff1a;复用mybatis的功能特性&#xff0c;如:缓存,if动态判断标签等特…