一文详解如何使用Java获取PDF页面信息

2025-07-15 19:50

本文主要是介绍一文详解如何使用Java获取PDF页面信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧...

引言

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

一文详解如何使用Java获取PDF页面信息

边框类型说明
MediaBox页面介质框,表示纸张的实际物理尺寸范围
CropBox裁剪框,定义最终用于显示或打印的区域
BleedBox出血框,用于印刷时预留的出血区域
TrimBox成品框,表示裁剪后的页面成品大小
ArtBox作品框,限定页面中有效的内容区域

实现步骤:

  • 打开PDF文档并获取目标页面;
  • 分别使用PdfPageBase类的 getMediaBox()、getCropBox()、getBlewww.chinasem.cnedBox()、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.getWidESaLmKPkfcth(), 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: 宽 %.China编程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获取PDF页面信息的文章就介绍到这了,更多相关Java获取PDF信息内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于一文详解如何使用Java获取PDF页面信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155388

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建