一文详解如何使用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

相关文章

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方