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

使用 Java 获取 PDF 页面信息(页数、尺寸、旋转角度、方向、标签与边框)

目录

引言

一、安装和引入PDF处理库

二、获取 PDF 页数

三、获取页面尺寸(宽高)

四、获取页面旋转角度

五、判断页面方向(横向 / 纵向)

六、获取页面标签

七、获取页面边框信息

八、总结


引言

了解 PDF 页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环。PDF 文件可能包含多个页面,而这些页面可能具有不同的宽高、旋转角度、方向模式甚至自定义标签和边框信息。

本文将介绍如何使用 Java 读取 PDF 页面信息,包括:

  • 获取 PDF 页数
  • 获取页面尺寸(宽高)
  • 获取页面旋转角度
  • 判断页面方向(横向 / 纵向)
  • 获取页面标签
  • 获取页面边框信息(MediaBox、CropBox 等)

一、安装和引入PDF处理库

要在 Java 中获取 PDF 页面信息,可使用 Spire.PDF for Java 库。它支持加载、解析、编辑和导出 PDF 文件。

引入依赖

1. Maven项目

如果你使用 Maven 构建项目,可在 pom.xml 中添加如下依赖:

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

2. 非Maven项目

对于非 Maven 项目,你可以前往 官网 下载 jar 包并手动导入项目。

二、获取 PDF 页数

了解 PDF 的总页数是处理文档的第一步,它可以帮助我们执行分页提取、范围打印或页面遍历等操作。

实现步骤:

  • 创建 PdfDocument 对象;
  • 使用 PdfDocument.loadFromFile() 方法打开 PDF 文档;
  • 调用 PdfDocument.getPages().getCount() 获取页数。

示例代码:

import com.spire.pdf.*;public class GetPageCount {
public static void main(String[] args) {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("测试.pdf");int pageCount = pdf.getPages().getCount();System.out.println("该 PDF 共 " + pageCount + " 页。");pdf.close();}
}

三、获取页面尺寸(宽高)

页面的尺寸决定了内容的排版范围,不同的 PDF 页面可能采用不同的纸张标准,如 A4、Letter 或自定义大小。

实现步骤:

  • 打开 PDF 文档;
  • 使用PdfDocument.getPages().get()方法获取指定页面(通过索引);
  • 调用 PdfPageBase.getSize().getWidth() 和 PdfPageBase.getSize().getHeight() 方法获取宽高信息;
  • 输出尺寸数据。

示例代码:

import com.spire.pdf.*;public class GetPageSize {public static void main(String[] args) {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("测试.pdf");PdfPageBase page = pdf.getPages().get(0); // 获取第一页double width = page.getSize().getWidth();double height = page.getSize().getHeight();System.out.printf("第一页尺寸为:%.2f x %.2f pt%n", width, height);pdf.close();}
}

注意,页面尺寸默认单位为 pt(磅),1 英寸 = 72 磅。如果你需要将尺寸转换为英寸、像素、厘米或毫米进行打印适配或前端渲染,可以使用 PdfUnitConvertor 类进行单位转换:

float pointValue = 595.0f; // 示例:A4 宽度为 595 ptPdfUnitConvertor converter = new PdfUnitConvertor();float inch = converter.convertUnits(pointValue, PdfGraphicsUnit.Point, PdfGraphicsUnit.Inch);
float pixel = converter.convertUnits(pointValue, PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel);
float mm = converter.convertUnits(pointValue, PdfGraphicsUnit.Point, PdfGraphicsUnit.Millimeter);
float cm = converter.convertUnits(pointValue, PdfGraphicsUnit.Point, PdfGraphicsUnit.Centimeter);System.out.printf("595 pt 对应:%.2f 英寸,%.2f 像素,%.2f 毫米,%.2f 厘米%n", inch, pixel, mm, cm);

四、获取页面旋转角度

页面旋转信息可以帮助我们判断是否需要在程序中进行角度还原或页面调整,避免内容呈现异常。

实现步骤:

  • 打开 PDF 文档;
  • 获取目标页面;
  • 使用 PdfPageBase.getRotation().getValue() 方法获取旋转角度;
  • 输出角度信息。

示例代码:

import com.spire.pdf.*;public class GetPageRotation {public static void main(String[] args) {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("测试.pdf");PdfPageBase page = pdf.getPages().get(0);int rotation = page.getRotation().getValue();System.out.println("第一页旋转角度为:" + rotation + "°");pdf.close();}
}

五、判断页面方向(横向 / 纵向)

PDF 页面可分为 Portrait(纵向)和 Landscape(横向),不同方向适用于不同类型的内容展示(如文字或表格)。

实现步骤:

  • 打开 PDF 文档;
  • 获取目标页面;
  • 调用 PdfPageBase.getSize().getWidth() 和 PdfPageBase.getSize().getHeight() 方法获取页面的宽高信息;
  • 比较宽度与高度。若宽度 > 高度,则为横向,否则为纵向;
  • 输出页面方向信息。

示例代码:

import com.spire.pdf.*;public class GetPageOrientation {public static void main(String[] args) {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("测试.pdf");PdfPageBase page = pdf.getPages().get(0);double width = page.getSize().getWidth();double height = page.getSize().getHeight();String orientation = width > height ? "横向" : "纵向";System.out.println("第一页页面方向为:" + orientation);pdf.close();}
}

六、获取页面标签

PDF 页面标签(Page Label)可用于自定义页码(如 i, ii, iii, A-1, A-2),对于章节分隔、目录定位等功能尤为常见。

实现步骤:

  • 打开 PDF 文档并获取目标页面;
  • 使用 PdfPageBase.getPageLabel() 方法获取目标页的标签文字;
  • 判断标签文字是否存在。若存在,输出标签信息,否则输出“无标签”。

示例代码:

import com.spire.pdf.*;public class GetPageLabel {public static void main(String[] args) {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("示例.pdf");PdfPageBase page = pdf.getPages().get(0);String label = page.getPageLabel();String labelText = (label != null && !label.trim().isEmpty()) ? label : "无标签";System.out.println("第一页页面标签为:" + labelText);pdf.close();}
}

七、获取页面边框信息

PDF 页面所定义的边框不仅用于限制内容的显示范围,还涵盖多个与印刷和裁切相关的区域。这些边框各自承担不同的功能,例如用于标识纸张尺寸、设置可视区域、预留出血位置以及定义裁切和内容区域等。下图展示了这些边框在页面中的分布情况:

PDF边框在页面中的分布情况

PDF页面各类边框说明

边框类型

说明

MediaBox

页面介质框,表示纸张的实际物理尺寸范围

CropBox

裁剪框,定义最终用于显示或打印的区域

BleedBox

出血框,用于印刷时预留的出血区域

TrimBox

成品框,表示裁剪后的页面成品大小

ArtBox

作品框,限定页面中有效的内容区域

实现步骤:

  • 打开PDF文档并获取目标页面;
  • 分别使用PdfPageBase类的 getMediaBox()、getCropBox()、getBleedBox()、getTrimBox()、getArtBox() 方法获取各个对应的边框信息;
  • 分别使用 Rectangle2D类的getWidth()、getHeight()、getX()、getY() 方法读取每个边框的宽度、高度、以及X和Y坐标等属性值,输出结果。

示例代码:

import com.spire.pdf.*;
import java.awt.geom.Rectangle2D;public class GetPageBoxes {public static void main(String[] args) {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("测试.pdf");PdfPageBase page = pdf.getPages().get(0);Rectangle2D mediaBox = page.getMediaBox();Rectangle2D cropBox = page.getCropBox();Rectangle2D bleedBox = page.getBleedBox();Rectangle2D trimBox = page.getTrimBox();Rectangle2D artBox = page.getArtBox();System.out.printf("MediaBox: 宽 %.2f, 高 %.2f, X %.2f, Y %.2f%n",mediaBox.getWidth(), mediaBox.getHeight(), mediaBox.getX(), mediaBox.getY());System.out.printf("CropBox: 宽 %.2f, 高 %.2f, X %.2f, Y %.2f%n",cropBox.getWidth(), cropBox.getHeight(), cropBox.getX(), cropBox.getY());System.out.printf("BleedBox: 宽 %.2f, 高 %.2f, X %.2f, Y %.2f%n",bleedBox.getWidth(), bleedBox.getHeight(), bleedBox.getX(), bleedBox.getY());System.out.printf("TrimBox: 宽 %.2f, 高 %.2f, X %.2f, Y %.2f%n",trimBox.getWidth(), trimBox.getHeight(), trimBox.getX(), trimBox.getY());System.out.printf("ArtBox: 宽 %.2f, 高 %.2f, X %.2f, Y %.2f%n",artBox.getWidth(), artBox.getHeight(), artBox.getX(), artBox.getY());pdf.close();}
}

八、总结

本文详细介绍了如何通过 Java 语言结合 Spire.PDF for Java 库获取 PDF 文档中各页面的重要属性信息,包括页数、页面尺寸、旋转角度、页面方向、页面标签以及边框区域等。

如果你有提取表格、添加签名、水印或压缩文件等更复杂的处理需求,也可以使用 Spire.PDF for Java 提供的相关接口。具体使用方法可参考官方文档中的详细说明。

以上就是使用Java 获取 PDF 页面信息的所有内容。感谢阅读!

本文完结。

http://www.xdnf.cn/news/15436.html

相关文章:

  • Flink双流实时对账
  • 大语言模型零样本情感分析实战:无需机器学习训练,96%准确率实现指南
  • 云手机隐私保护指南:如何保障账号与数据的云端安全?
  • 虚拟机删除操作
  • IELTS 阅读C15-test1-passage 2 复盘
  • React源码6 三大核心模块之一:commit, finishConcurrentRender函数
  • 24.找到列表中最大或最小值的索引
  • Pitaya 是一个简单、快速、轻量级的游戏服务器框架,它为分布式多人游戏和服务器端应用程序提供了一个基本的开发框架
  • 优雅的Java:01.数据更新如何更优雅
  • Python学习之路(十二)-开发和优化处理大数据量接口
  • 从springcloud-gateway了解同步和异步,webflux webMvc、共享变量
  • S7-200 SMART PLC:不同CPU及数字量 IO 接线全解析
  • 构建强大的物联网架构所需了解的一切
  • Janitor AI重塑人机交互的沉浸式智能体验
  • 大型语言模型(LLM)的技术面试题
  • 【机器人】REGNav 具身导航 | 跨房间引导 | 图像目标导航 AAAI 2025
  • 【算法-BFS 解决最短路问题】探索BFS在图论中的应用:最短路径问题的高效解法
  • docker停止所有容器和删除所有镜像
  • 【Docker基础】Dockerfile指令速览:高级构建指令详解
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十六课——图像五行缓存的FPGA实现
  • 常见的 Commit 描述 分类及示例
  • 2025-07-15通过边缘线检测图像里的主体有没有出血
  • 2025-07-15 李沐深度学习6——Softmax回归
  • 实测两款效率工具:驾考刷题和证件照处理的免费方案
  • vscode里面怎么配置ssh步骤
  • 算法学习笔记:22.贪心算法之霍夫曼编码 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • JavaScript进阶篇——第三章 箭头函数核心
  • 17. 什么是 webSocket ?
  • 面试遇到的问题
  • 项目总体框架(servlet+axios+Mybatis)