PDF处理控件Spire.PDF系列教程:Java 给现有的 PDF 文档添加页眉页脚

embedded/2025/3/31 8:05:33/

在 PDF 文档中添加页眉和页脚有助于保持一致的版式和专业的外观。页眉通常位于页面顶部,可显示文档标题、作者姓名或公司名称,而页脚位于页面底部,常用于添加页码、日期或法律声明。这些元素对于报告、合同和正式文件至关重要,不仅提升了可读性,还符合规范要求。本文将介绍如何使用 Spire.PDF for Java,通过 Java 在现有的 PDF 文档中添加页眉和页脚,并提供详细的步骤和代码示例。

  • Java 在现有 PDF 文档中添加页眉
  • Java 在现有 PDF 文档中添加页脚

安装 Spire.PDF for Java

E-iceblue旗下spire系列产品是文档处理领域的优秀产品,支持国产信创。首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 JAR 文件。

<repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository>
</repositories>
<dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf</artifactId><version>11.2.3</version></dependency>
</dependencies>

背景知识

在使用 Spire.PDF for Java 处理现有的 PDF 文档时,需要了解其坐标系的原点位于页面左上角,X 轴向右延伸,Y 轴向下延伸。向页面添加页眉是指在页面上方的空白区域内插入内容,如文本、图片、自动字段和形状等;而添加页脚实际上就是在页面底部的空白区域插入内容。

PDF 页面坐标系

如果空白区域不足以容纳您要添加的内容,您可以考虑增大 PDF 页边距。

Java 在现有 PDF 文档中添加页眉

Spire.PDF for Java 帮助用户通过 PdfCanvas.drawString()PdfCanvas.drawImage() 和 PdfCanvas.drawLine() 等方法在 PDF 文档的页面上绘制文本、图像和形状。为了在页眉中添加页码、章节、日期等动态信息,您需要使用自动字段。Spire.PDF for Java 提供了 PdfPageNumberField 类、PdfSectionNumberField 类和 PdfCreationDateField 类等来实现这些数据的动态添加。

下面是使用 Spire.PDF for Java 向 PDF 文档添加包含文本、图像、日期和线条的页眉的详细步骤:

  • 创建一个 PdfDocument 对象。
  • 通过 PdfDocument.loadFromFile() 方法加载 PDF 文档。
  • 创建字体、画笔和画刷对象,用于绘制文本或形状。
  • 使用 PdfPageBase.getCanvas().drawString() 方法在页面上方的空白区域绘制文本。
  • 利用 PdfPageBase.getCanvas().drawLine() 方法在页面上方的空白区域绘制一条线。
  • 通过 PdfImage.fromFile() 方法加载图片。
  • 使用 PdfPageBase.getCanvas().drawImage() 方法将图片绘制到页面上方的空白区域。
  • 创建一个 PdfCreationDateField 对象,用以反映文档的创建时间。
  • 使用 PdfCreationDateField.draw() 方法将文档的创建时间绘制到页面上方的空白区域。
  • 通过 PdfDocument.saveToFile() 方法将文档保存为新的 PDF 文件。

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.automaticfields.PdfCompositeField;
import com.spire.pdf.automaticfields.PdfCreationDateField;
import com.spire.pdf.graphics.*;import java.awt.*;public class AddHeaderToPdf {public static void main(String[] args) {// 创建一个 PdfDocument 对象PdfDocument doc = new PdfDocument();// 加载 PDF 文件doc.loadFromFile("/示例.pdf");// 加载添加到页眉的图像PdfImage headerImage = PdfImage.fromFile("/Logo1.png");// 获取图像的像素宽度float width = headerImage.getWidth();// 将像素转换为点PdfUnitConvertor unitCvtr = new PdfUnitConvertor();float pointWidth = unitCvtr.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);// 自定义页眉文本String headerText = "冰蓝科技\nwww.e-iceblue.cn";// 创建字体PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("DengXian", Font.BOLD, 12),true);// 创建笔刷PdfBrush brush = PdfBrushes.getPurple();// 创建画笔PdfPen pen = new PdfPen(brush, 1.0f);// 创建文档创建日期字段PdfCreationDateField creationDateField = new PdfCreationDateField(font, brush);creationDateField.setDateFormatString("yyyy-MM-dd");// 创建组合字段用以显示文本和日期PdfCompositeField compositeField = new PdfCompositeField(font, brush, "创建时间: {0}", creationDateField);compositeField.setLocation(new Point(55, 58));// 遍历文档中的页面for (int i = 0; i < doc.getPages().getCount(); i++){// 获取当前页面PdfPageBase page = doc.getPages().get(i);// 将图像绘制到页面上方空白区域page.getCanvas().drawImage(headerImage, page.getActualSize().getWidth() - pointWidth - 55, 20);// 绘制文本page.getCanvas().drawString(headerText, font, brush, 55, 33);// 绘制线条page.getCanvas().drawLine(pen, new Point(55, 73), new Point((int)page.getActualSize().getWidth() - 55, 70));// 将组合字段绘制到页眉区域compositeField.draw(page.getCanvas());}// 保存修改后的文档doc.saveToFile("/添加页眉.pdf");doc.dispose();}
}

Java 给现有的 PDF 文档添加页眉

Java 在现有 PDF 文档中添加页脚

同样的,PdfCanvas.drawString()PdfCanvas.drawImage() 和 PdfCanvas.drawLine() 方法也可以用来在 PDF 文档中添加页脚。通过调整 X 轴和 Y 轴坐标,你可以在 PDF 页面上的任何位置绘制想要添加的信息。如果需要在页脚添加动态数据,如页码、章节号、日期等,可以使用由 Spire.PDF for Java 提供的 PdfPageNumberFieldPdfPageCountFieldPdfSectionNumberField 等类,以实现动态信息的自动添加。

以下是使用 Spire.PDF for Java 在 PDF 文档中添加包含图像和页码的页脚的具体流程:

  • 创建一个 PdfDocument 对象。
  • 通过 PdfDocument.loadFromFile() 方法加载一个 PDF 文档。
  • 使用 PdfImage.fromFile() 方法加载图像。
  • 利用 PdfPageBase.getCanvas().drawImage() 方法在页面底部的空白区域绘制图像。
  • 创建 PdfPageNumberField 和 PdfPageCountField 对象,并将它们组合到 PdfCompositeField 对象中,以返回“第 {0} 页,共 {1} 页”格式的页码字符串。
  • 使用 PdfCompositeField.draw() 方法在页面底部空白区域绘制页码。
  • 使用 PdfDocument.saveToFile() 方法将文档保存为新的 PDF 文件。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.automaticfields.PdfCompositeField;
import com.spire.pdf.automaticfields.PdfPageCountField;
import com.spire.pdf.automaticfields.PdfPageNumberField;
import com.spire.pdf.graphics.PdfBrush;
import com.spire.pdf.graphics.PdfBrushes;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTrueTypeFont;import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;public class AddFooterToPdf {public static void main(String[] args) {// 创建一个 PdfDocument 对象PdfDocument doc = new PdfDocument();// 加载 PDF 文件doc.loadFromFile("/示例.pdf");// 加载一张图片PdfImage footerImage = PdfImage.fromFile("/banner.png");// 创建字体PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("DengXian", Font.BOLD, 12),true);// 创建笔刷PdfBrush brush = PdfBrushes.getWhite();// 创建当前页码字段PdfPageNumberField pageNumberField = new PdfPageNumberField();// 创建总页数字段PdfPageCountField pageCountField = new PdfPageCountField();// 创建一个组合字段,将页码和页数字段组合为字符串PdfCompositeField compositeField = new PdfCompositeField(font, brush, "第 {0} 页,共 {1} 页", pageNumberField, pageCountField);// 获取字体大小Dimension2D fontSize = font.measureString(compositeField.getText());// 获取页面大小Dimension2D pageSize = doc.getPages().get(0).getSize();// 设置组合字段的位置compositeField.setLocation(new Point2D.Double((pageSize.getWidth() - fontSize.getWidth())/2,  pageSize.getHeight() - 45));// 遍历文档中的页面for (int i = 0; i < doc.getPages().getCount(); i++){// 获取指定页面PdfPageBase page = doc.getPages().get(i);// 在页面底部空白区域绘制图片page.getCanvas().drawImage(footerImage, 55, pageSize.getHeight() - 65, pageSize.getWidth() - 110, 50);// 在页面底部空白区域绘制组合字段compositeField.draw(page.getCanvas());}// 保存结果文档doc.saveToFile("/添加页脚.pdf");doc.dispose();}
}

Java 给现有的 PDF 文档添加页脚


http://www.ppmy.cn/embedded/177450.html

相关文章

React 18 核心技术深度解析:从并发渲染到异步数据流优化

文章目录 一、并发渲染架构升级二、Suspense 异步数据流管理三、自动批处理机制增强四、状态管理新范式五、服务端渲染优化六、构建与兼容性优化 一、并发渲染架构升级 React 18 通过引入并发模式&#xff08;Concurrent Mode&#xff09;重构了渲染机制&#xff0c;将单次渲染…

【Paper Tips】随记4-快速获取网页规范化数据

写paper时随心记录一些对自己有用的skills与tips。 文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明&#xff08;1&#xff09;网络爬虫的合规性 2.2 应用步骤2.2.1 下载对应网页html文件。&#xff08;非必须&#xff09;2.2.2 获取条目链接2.2.3 …

蓝桥杯算法实战分享

蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛&#xff0c;涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧&#xff0c;帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…

ngx_http_core_location

定义在 src\http\ngx_http_core_module.c static char * ngx_http_core_location(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy) {char *rv;u_char *mod;size_t len;ngx_str_t *value, *n…

01 设计模式和设计原则

类设计原则&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;&#xff1a;实现类要职责单一开闭原则&#xff08;Open Close Principle&#xff0c;OCP&#xff09;&#xff1a;对扩展开放&#xff0c;对修改关闭里氏替换原则…

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

HarmonyOS NEXT 实现拖动卡片背景模糊效果

大家好&#xff0c;我是 V 哥。 最近看到在 HarmonyOS NEXT开发中&#xff0c;实现拖动卡片背景模糊的案例效果&#xff0c;在拖动时背景图片模糊&#xff0c;松开后恢复正常。感觉很酷&#xff0c;写一个案例玩一下。 需求分析 首先&#xff0c;咱们来一起分析一下这个效果要…

卷积神经网络 - AlexNet

AlexNet是深度学习领域具有里程碑意义的卷积神经网络&#xff08;CNN&#xff09;&#xff0c;由Alex Krizhevsky等人于2012年提出&#xff0c;并在ImageNet图像分类竞赛&#xff08;ILSVRC&#xff09;中以显著优势夺冠&#xff0c;推动了深度学习在计算机视觉中的广泛应用。 …