首页 > 编程语言 >Java 在PDF中插入页眉、页脚

Java 在PDF中插入页眉、页脚

时间:2024-03-25 15:44:39浏览次数:30  
标签:页脚 new 页眉 import PDF pdf

在处理PDF文档时,有时需要为文档中的每一页添加页眉和页脚,以包含一些有用的信息,如文档标题、章节名称、日期、页码等。对于需要自动化处理的场景,或者需要在大量文档中添加一致的页眉和页脚,可以通过编程的方式来实现。本文将介绍如何使用Java为PDF文件添加页眉、页脚。

所需工具Free Spire.PDF for Java 免费库。可以点击链接下载最新版本并手动添加引用到你的Java项目中,同时也支持通过Mave仓库安装。

方法简介:

在以下示例中,我们用到了 PdfCanvas 类的DrawString()DrawImage()DrawLine() 方法,分别用于在PDF页面上指定位置绘制文本、图片和线条。

如果要添加动态的信息如页码、页数、章节编号等,则可以使用Free Spire.PDF for Java提供的PdfPageNumberFieldPdfPageCountFieldPdfSectionNumberField 类,然后再使用Draw() 方法将其绘制到PDF页眉或页脚位置。

 

示例代码:

1. 使用Java在PDF中插入页眉

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;
 
import java.awt.*;
 
public class PDFHeader {
 
    public static void main(String[] args) {
 
        //加载PDF文档
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("考核.pdf");
 
        //加载图片
        PdfImage headerImage = PdfImage.fromFile("logo.jpg");
 
        //获取图片宽度
        float width = headerImage.getWidth();
        PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
        float pointWidth = unitCvtr.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);
 
        //指定页眉文本
        String headerText = "年度绩效考核\nAAA有限责任公司";
 
        //创建字体
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", Font.BOLD, 12),true);
 
        //创建画笔
        PdfBrush brush = PdfBrushes.getRed();
        PdfPen pen = new PdfPen(PdfBrushes.getBlack(), 1.0f);
 
        //遍历所有PDF页面
        for (int i = 0; i < pdf.getPages().getCount(); i++)
        {
            //获取指定页面
            PdfPageBase page = pdf.getPages().get(i);
 
            //在顶部空白区域绘制图像
            page.getCanvas().drawImage(headerImage, page.getActualSize().getWidth() - pointWidth - 55, 20);
 
            //在顶部空白区域绘制文本
            page.getCanvas().drawString(headerText, font, brush, 55, 30);
 
            //在顶部空白区域绘制一条线
            page.getCanvas().drawLine(pen, new Point(55, 70), new Point((int)page.getActualSize().getWidth() - 55, 70));
 
        }
 
        //保存生成PDF文件
        pdf.saveToFile("PDF页眉.pdf");
        pdf.dispose();
    }
}

以上代码遍历了PDF文档的所有页面,并在每一页的页眉位置添加了文本、图片和分隔线,运行后效果图如下:

 

 

2. 使用Java在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.*;
 
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
 
public class PDFFooter {
 
    public static void main(String[] args) {
 
        //加载PDF文档
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("考核.pdf");
 
        //创建字体
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", Font.BOLD, 12),true);
 
        //创建画笔
        PdfBrush brush = PdfBrushes.getBlack();
        PdfPen pen = new PdfPen(PdfBrushes.getBlack(), 1.0f);
 
        //创建页码字段
        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 = pdf.getPages().get(0).getSize();
 
        //设置复合字段的位置
        compositeField.setLocation(new Point2D.Double((pageSize.getWidth() - fontSize.getWidth())/2,  pageSize.getHeight() - 45));
 
        //遍历PDF页面
        for (int i = 0; i < pdf.getPages().getCount(); i++)
        {
            //获取指定页
            PdfPageBase page = pdf.getPages().get(i);
 
            //在底部空白区域绘制一条线
            page.getCanvas().drawLine(pen, new Point(72, (int) (pageSize.getHeight() - 60)), new Point((int)pageSize.getWidth() - 72, (int) pageSize.getHeight()- 60));
 
            //在底部空白区域绘制复合字段
            compositeField.draw(page.getCanvas());
        }
 
        //保存生成PDF文件
        pdf.saveToFile("PDF页脚.pdf");
        pdf.dispose();
    }
}

以上代码遍历了PDF文档的所有页面,并在每一页的页脚位置添加了对应的页码、页数信息以及一条分隔线,运行后效果图如下:

 

小结:

在不破坏PDF文档布局的情况下,我们可以使用Free Spire.PDF for Java免费库将所需的元素绘制到PDF页面顶部和底部的指定位置来生成自定义页眉页脚,提高PDF文档的可读性和专业性。

此外,Free Spire.PDF for Java免费库还支持其他一些操作PDF文档的功能,更多示例可以点击了解:

https://www.e-iceblue.cn/spirepdfjava/spire-pdf-for-java-program-guide-content.html

标签:页脚,new,页眉,import,PDF,pdf
From: https://www.cnblogs.com/Yesi/p/18094584

相关文章

  • pdf转单张或多张图片
    packagewuxu.test;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjava.net.URL;importjava.util.ArrayList;importjava.util.List;importjava.util.Objects;importjavax.imageio.ImageIO;importorg.apache.c......
  • 2024 年 8 个最佳 PDF 转 JPG 转换器[免费和付费]
    虽然PDF(便携式文档文件)是一种流行的文档共享格式,但有时您可能希望将PDF文件转换为JPG,然后在网页或社交媒体上共享它们。在本文中,我们将讨论适用于Windows10和11的出色PDF到JPG转换器的所有特性。与图像不同,PDF文件可以说更难集成到网页中。另一方面,仅拖放图像即......
  • ASP.NET Core 切分、合并 PDF
    继续使用DocNET:https://github.com/GowenGit/docnetNuget:Install-PackageDocnet.Core切分PDF注意,DocNET的Split方法的索引是从0开始的,所以我们认为的获取PDF的第三到第五页,在DocNET的Split方法其实是从第二到第四页…publicstaticboolSplitPdf(string......
  • Adobe的PDF编辑软件Acrobat Pro DC 2024.001.20604版本下载与安装教程
    目录前言一、AcrobatProDC2024安装二、使用配置总结前言PDF格式(缩写为便携式文档格式和便携式文档格式)的发展始于1990年。这种格式用于以类似于打印文档的固定格式呈现包含文本、图像和其他要求的文档。Adobe在1993年发布了专有的Acrobat软件,首次展示了对这种......
  • NCV8702MX33TCG电源管理线性稳压器芯片中文资料PDF数据手册引脚图图片价格
    产品概述:NCV8702是一款200mA低漏静止电流、低漏线性稳压器,带超低噪声特性。它的低噪音结合高电源抑制比(PSRR)使其特别适用于射频、音频或成像应用。该器件采用先进的BiCMOS工艺制造,可提供低电流耗量和卓越噪声性能的强大组合。NCV8702可稳定使用小型低值1µ电容器......
  • NCV7718CDPR2G半桥驱动器规格书PDF数据手册引脚图图片价格参数概概述
    产品概述:NCV7718是一款六角半桥驱动器,具有专为汽车和工业运动控制应用设计的保护功能。NCV7718具有独立的控制和诊断功能。该器件可在正向、反向、制动和高阻抗状态下运行。驱动器通过16位SPI接口进行控制,并且菊花链兼容规格书参数:引脚图:......
  • NCV7351D13R2G收发器芯片中文资料规格书PDF数据手册引脚图参数图片价格特性
    产品概述:NCV7351CAN收发器是控制器区域网络(CAN)协议控制器和物理总线之间的接口,可在12V和24V系统中使用。该收发器为总线提供差分发射功能,向CAN控制器提供差分接收功能。NCV7351是CAN高速收发器系列的新增产品,是NCV734xCAN独立收发器和AMIS42665、AMIS306......
  • NCV8703MX33TCG 线性稳压器芯片中文资料规格书PDF数据手册引脚图图片价格
    产品概述:NCV8703是一款低噪音、低功耗和低漏线性稳压器。该器件具有优异的噪音和PSRR规格,适用于使用射频接收器、成像传感器、音频处理器或需要外部洁净电源的任何部件的产品。NCV8703使用创新的自适应接地电流电路可确保轻负载调节下的超低接地电流。规格书参数:引脚图......
  • 大模型时代的PDF解析工具
    去年(2023年)是大模型爆发元年。但是大模型具有两个缺点:缺失私有领域知识和幻觉。缺失私有领域知识是指大模型训练时并没有企业私有数据/知识,所以无法正确回答相关问题。并且在这种情况下,大模型会一本正经地胡说八道(即幻觉),给出错误的回答。那么如何解决这两个缺点?目前主要有两种方......
  • pdf417lib库封装和使用
    pdf417lib库封装和使用pdf417lib下载链接https://master.dl.sourceforge.net/project/pdf417lib/pdf417lib/0.91/pdf417lib-c-0.91.zip?viasf=1CMake文件yh@ubuntu:/Test/pdf417lib$tree.├──build├──CMakeLists.txt├──include│├──pdf417.h│├......