引言
了解 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 pt 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 页面所定义的边框不仅用于限制内容的显示范围,还涵盖多个与印刷和裁切相关的区域。这些边框各自承担不同的功能,例如用于标识纸张尺寸、设置可视区域、预留出血位置以及定义裁切和内容区域等。下图展示了这些边框在页面中的分布情况:
边框类型 | 说明 |
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获取pdf页面信息的文章就介绍到这了,更多相关java获取pdf信息内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!