当前位置: 首页 > article >正文

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

在 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.kler.cn/a/612755.html

相关文章:

  • PyTorch 深度学习实战(27):扩散模型(Diffusion Models)与图像生成
  • java替换html中的标签
  • 《深度剖析SQL数据类型转换:隐式与显式的奥秘》
  • WPF 附加属性
  • 在海量数据中精准定位:BloomFilter的工作原理与实战指南
  • OmniGraffle Pro for Mac思维导图
  • 自行车模型与汽车模型的混合策略在自动驾驶中的多维度协同优化
  • 测试模版12
  • 从链上到现实:Python如何重塑区块链供应链管理
  • 【DeepSeek学C++】移动构造函数
  • 127. 单词接龙【 力扣(LeetCode) 】
  • T11 TensorFlow入门实战——优化器对比实验
  • 谈谈空间复杂度考量,特别是递归调用栈空间消耗?
  • HTTP 状态码与前端 try-catch 捕获关系
  • java八股文之企业场景
  • Oracle数据库数据编程SQL<2.2 DDL 视图、序列>
  • 小白工具PDF转换 PDF转图片 超便捷软件 文件格式转换 简单好用效率高
  • RabbitMQ 核心组件及功能详解
  • 信息隐藏技术
  • Flutter_学习记录_get_cli的使用