Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)
目录
安装所需库
Python获取PDF页数
Python获取PDF页面尺寸
Python获取PDF页面旋转角度
Python获取PDF页面方向
Python获取PDF页面标签
Python获取PDF页面边框信息
了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要。PDF文件通常包含多个页面,每个页面可能有不同的尺寸、方向、旋转角度以及其他属性。在很多应用场景下,获取这些页面信息可以帮助我们更好地控制PDF内容的显示、打印或转换。这篇文章将介绍如何使用Python获取PDF文档的各种页面信息,包括:
- 获取PDF页数
- 获取PDF页面尺寸
- 获取PDF页面旋转角度
- 获取PDF页面方向
- 获取PDF页面标签
- 获取PDF页面边框信息
安装所需库
要在Python中获取PDF的各种页面信息,可以使用Spire.PDF for Python库。它是一个专门用于在Python应用程序中创建、读取、操作和转换PDF文档的库。
你可以通过在终端运行以下命令来从PyPI安装Spire.PDF for Python:
pip install Spire.PDF
Python获取PDF页数
PDF文件中的页数是基本信息之一,了解文档总共有多少页可以帮助我们在操作文件时做出相应的调整。比如在拆分文件、打印特定页码或进行内容提取时,知道文件总页数是至关重要的。
以下是获取PDF页数的具体步骤:
- 使用PdfDocument类打开PDF文件。
- 使用PdfDocument.Pages.Count属性来获取总页数。
实现代码:
# 导入所需的模块
from spire.pdf.common import *
from spire.pdf import *# 打开PDF文档
pdf = PdfDocument("Sample.pdf")# 获取页面总数
page_count = pdf.Pages.Count# 输出页面总数
print(f"该PDF有 {page_count} 页。")
pdf.Close()
Python获取PDF页面尺寸
PDF的页面尺寸决定了内容如何在页面上呈现,不同的文件可能使用不同的纸张尺寸,如A4、A3等。了解页面尺寸可以帮助我们确保内容适合打印或显示。
以下是获取PDF页面尺寸的具体步骤:
- 使用PdfDocument类打开PDF文件。
- 获取特定页,使用PdfPageBase.Size.Width和PdfPageBase.Size.Height来获取页面宽度和高度。
实现代码:
# 导入所需的模块
from spire.pdf.common import *
from spire.pdf import *# 打开PDF文档
pdf = PdfDocument("Sample.pdf")# 通过索引获取第一页(索引从0开始)
page = pdf.Pages[0]# 获取第一页的宽度和高度
width = page.Size.Width
height = page.Size.Height# 输出第一页的尺寸
print(f"第一页的尺寸为 {width} x {height} 磅。")
pdf.Close()
注意,以上获取的值以磅(pt)为单位,你可以使用 Spire.PDF for Python 提供的 PdfUnitConvertor 类在磅与其他单位例如英寸、像素、厘米和毫米之间进行转换。转换代码如下:
# 创建 PdfUnitConvertor 对象
converter = PdfUnitConvertor()# 将磅转换为英寸
inch_value = converter.ConvertUnits(point_value, PdfGraphicsUnit.Point, PdfGraphicsUnit.Inch)# 将磅转换为像素
pixel_value = converter.ConvertUnits(point_value, PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel)# 将磅转换为厘米
centimeter_value = converter.ConvertUnits(point_value, PdfGraphicsUnit.Point, PdfGraphicsUnit.Centimeter)# 将磅转换为毫米
millimeter_value = converter.ConvertUnits(point_value, PdfGraphicsUnit.Point, PdfGraphicsUnit.Millimeter)
Python获取PDF页面旋转角度
有时PDF中的页面可能由于编辑或导出过程中发生旋转,导致页面的内容显示方向不正确。获取页面的旋转角度(如0度、90度、180度或270度)可以帮助我们判断页面是否需要旋转以便正确显示。
以下是获取PDF页面旋转角度的具体步骤:
- 使用PdfDocument类打开PDF文件。
- 获取特定页,使用PdfPageBase.Rotation属性来获取页面的旋转角度。
实现代码:
# 导入所需的模块
from spire.pdf.common import *
from spire.pdf import *# 打开PDF文档
pdf = PdfDocument("Sample.pdf")# 通过索引获取第一页(索引从0开始)
page = pdf.Pages[0]# 获取第一页的旋转信息
rotation_info = page.Rotation# 确定旋转角度
if rotation_info == PdfPageRotateAngle.RotateAngle0:rotation_angle = "0度(正常)"
elif rotation_info == PdfPageRotateAngle.RotateAngle90:rotation_angle = "90度(顺时针旋转)"
elif rotation_info == PdfPageRotateAngle.RotateAngle180:rotation_angle = "180度(倒置)"
elif rotation_info == PdfPageRotateAngle.RotateAngle270:rotation_angle = "270度(逆时针旋转)"
else:rotation_angle = "未知旋转角度"# 输出第一页的旋转角度
print(f"第一页的旋转角度为 {rotation_angle}。")
pdf.Close()
Python获取PDF页面方向
PDF页面的方向可以是纵向(Portrait)或横向(Landscape)。不同的页面方向适用于不同的内容展示方式。例如,表格或图表可能更适合横向展示,而文本内容则通常为纵向。判断页面的方向有助于确保页面内容在显示或打印时的布局正确。
以下是获取PDF页面方向的具体步骤:
- 使用PdfDocument类打开PDF文件。
- 获取特定页,根据页面宽高来判断方向。
- 宽度小于高度为纵向。
- 宽度大于高度为横向。
实现代码:
# 导入所需的模块
from spire.pdf.common import *
from spire.pdf import *# 打开PDF文档
pdf = PdfDocument("Sample.pdf")# 通过索引获取第一页(索引从0开始)
page = pdf.Pages[0]# 获取第一页的宽度和高度
width = page.Size.Width
height = page.Size.Height# 检查页面是纵向模式还是横向模式
if width > height:print("第一页是横向模式。")
else:print("第一页是纵向模式。")pdf.Close()
Python获取PDF页面标签
页面标签(Page Label)在文档导航时非常有用,通常用于显示自定义页码,帮助用户快速找到指定内容。
实现步骤:
- 使用PdfDocument类打开PDF文件。
- 获取特定页,使用PdfPageBase.Label属性获取页面的自定义标签信息。
实现代码:
# 导入所需的模块
from spire.pdf.common import *
from spire.pdf import *# 打开PDF文档
pdf = PdfDocument("Sample.pdf")# 通过索引获取第一页(索引从0开始)
page = pdf.Pages[0]# 获取第一页的标签
label = page.PageLabel# 输出第一页的标签
print(f"第一页的标签是: {label}")
pdf.Close()
Python获取PDF页面边框信息
PDF拥有5种不同的页面边框:
- 媒体框(MediaBox):定义页面上需要印刷的物理介质的范围。
- 裁剪框(CropBox):定义页面显示或打印的内容范围,默认值为页面的媒体框。
- 出血框(BleedBox):PDF 1.3 起开始支持,指在PDF文档中,为了确保印刷品的完整性,在成品尺寸的四周加上一定距离的安全区域。这个安全区域通常为3mm,目的是为了减少裁切时的误差,防止重要内容被裁切掉或留下白边。
- 裁切框(TrimBox):PDF 1.3 起开始支持,显示印刷和裁切后,裁切文档的最终尺寸,也称为成品框。
- 作品框(ArtBox):PDF 1.3 起开始支持,定义页面上有意义的内容,包括可能存在的留白。
详情可以参考以下示意图:

以下是获取PDF页面边框信息的具体步骤:
- 使用PdfDocument类打开PDF文件。
- 获取特定页,使用PdfPageBase.MediaBox、PdfPageBase.CropBox、PdfPageBase.BleedBox、PdfPageBase.TrimBox和PdfPageBase.ArtBox等属性分别获取对应的边框。然后获取它们的相关信息,如尺寸和坐标位置。
实现代码:
# 导入所需的模块
from spire.pdf.common import *
from spire.pdf import *# 打开PDF文档
pdf = PdfDocument("Sample.pdf")# 通过索引获取第一页(索引从0开始)
page = pdf.Pages[0]# 获取第一页的媒体框、裁剪框、出血框、裁切框和作品框
media_box = page.MediaBox
crop_box = page.CropBox
bleed_box = page.BleedBox
trim_box = page.TrimBox
art_box = page.ArtBox# 输出每个框的尺寸和坐标
print(f"媒体框: 宽度 = {media_box.Width}, 高度 = {media_box.Height}, X = {media_box.X}, Y = {media_box.Y}")
print(f"裁剪框: 宽度 = {crop_box.Width}, 高度 = {crop_box.Height}, X = {crop_box.X}, Y = {crop_box.Y}")
print(f"出血框: 宽度 = {bleed_box.Width}, 高度 = {bleed_box.Height}, X = {bleed_box.X}, Y = {bleed_box.Y}")
print(f"裁切框: 宽度 = {trim_box.Width}, 高度 = {trim_box.Height}, X = {trim_box.X}, Y = {trim_box.Y}")
print(f"作品框: 宽度 = {art_box.Width}, 高度 = {art_box.Height}, X = {art_box.X}, Y = {art_box.Y}")
pdf.Close()
以上就是如何使用Python获取PDF页数、页面尺寸、旋转角度、页面方向、页面标签和页面边框等信息的全部内容。
相关文章:
Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)
目录 安装所需库 Python获取PDF页数 Python获取PDF页面尺寸 Python获取PDF页面旋转角度 Python获取PDF页面方向 Python获取PDF页面标签 Python获取PDF页面边框信息 了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要。PDF文件通常包含多个页面,每个页…...
独孤思维:曾经副业赚大钱的人,怎么不见了
01 总有一双眼睛默默关注你。 别以为自己每天做项目,日更文章,没人看。 总会有人默默观察你。 看你能坚持多久,看多段时间,你是不是还在。 今天上午,有个2年前认识的副业同行,今天突然跟我发消息。 说…...
OpenGL 异常处理-glCreateShader失败
【1】glCreateShader创建顶点着色器时候报错,如下 【2】原因分析 初始化失败,你使用一个扩extension loader library来访问现代OpenGL,当需要初始化它时,加载器需要一个当前的上下文来加载 【3】解决办法 GLenum glew_err gle…...
【el-pagination的使用及修改分页组件的整体大小修改默认样式的宽度详细教程】
今天遇到个bug,使用element-puls中的分页的时候,长度会超出盒子,今天教大家如何修改el-pagination的宽度,以及修改分页组件的整体大小 直接修改 style"width: 100%; margin-top: 10px"不生效 控制台修改el-pagination…...
Uniapp的学习
uniapp的内容和vue网页开发会有很多区别,但是都是基于vue开发的,大多数业务还是在vue打交道,但是这些uniapp的特殊的知识点也是要掌握好的。 基本配置 创建uniapp项目 npx degit dcloudio/uni-preset-vue#vite-ts 项目名 :用于…...
C#-万物之父object、装箱拆箱
万物之父:object 基于里氏替换原则,可以用object容器装载一切类型的变量。可以用来表示不确定类型,作为函数参数类型 object是所有类型的基类 装箱拆箱 用object存值类型(装箱)→ 把值类型用引用类型存储,…...
AI大模型重塑软件开发流程:从自动化编码到智能协作的未来展望
目录 1. 引言:AI大模型的崛起与软件开发的变革 1.1 AI大模型的兴起与发展背景 1.2 软件开发的现状与痛点 1.3 AI大模型如何解决这些问题 2. AI大模型的工作原理与技术背景 2.1 什么是AI大模型? 2.2 深度学习与自然语言处理技术的演变 2.3 大模型…...
HTB:GreenHorn[WriteUP]
目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 再次使用nmap对这三个端口进行脚本、服务扫描 尝试先通过curl访问靶机80端口 将靶机IP与该域名写入hosts使DNS本地解析 使用浏览器访问greenhorn.htb 使用Wappalyzer插件查看该页面技术栈 尝试在sea…...
SelfAttention在Ascend上的实现
1 SelfAttention是什么? Self-Attention(自注意力)机制是深度学习领域的一种重要技术,尤其在自然语言处理(NLP)任务中得到广泛应用。它是 Transformer 架构的核心组成部分之一,由 Vaswani 等人…...
C#设计模式
文章目录 项目地址一、开放封闭原则1.1 不好的版本1.2 将BankProcess的实现改为接口1.3 修改BankStuff类和IBankClient类二、依赖倒置原则2.1 高层不应该依赖于低层模块2.1.1 不好的例子2.1.2 修改:将各个国家的歌曲抽象2.2 抽象不应该依于细节2.2.1 不同的人开不同的车(接口…...
仪表板展示|DataEase看中国:历年双十一电商销售数据分析
背景介绍 2024年“双十一”购物季正在火热进行中。自2009年首次推出至今,“双十一”已经成为中国乃至全球最大的购物狂欢节,并且延伸到了全球范围内的电子商务平台。随着人们消费水平的提升以及电子商务的普及,线上销售模式也逐渐呈现多元化…...
急着骂华为?我劝你别急
文 | AUTO芯球 作者 | 雷慢 赛力斯这下怒了! 要对那些华为黑、问界黑出手了, 就在这几天,赛力斯起诉了一批蓄意抹黑、散步虚假信息的人。 起因是什么,听我慢慢说, 今年7月,佛山一辆问界M7发生交通事故…...
虚拟机linux7.9下安装mysql
1.MySQL官网下载安装包: MySQL :: Download MySQL Community Server https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 2.解压文件: #tar xvzf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 3.移动文件&#…...
【Linux】一篇文章轻松搞懂基本指令
本篇所有展示代码均是在超级用户的权限下进行的,如果不是超级用户并且一些命令执行的和我的不太一样,那么可以试着在对应命令前暂且加上sudo,我们在下一篇会讲权限问题,到时候再转换为普通用户。 本篇展示的内容是基于CentOs进行…...
深入浅出理解Spring和SpringBoot,剖析自动配置源码
文章目录 1.Spring2.SpringBoot3.小结 1.摘要 本文旨在带大家理解Spring框架和SpringBoot框架最为核心的部分,自Spring和SpringBoot问世以来,给Web开发掀起了巨大的浪潮,极大的缩短项目开发周期,下面将带大家分析Spring和SpringBo…...
Spring配置文件初始化加载(一)
1.枚举 public enum TestEnum {type_01("01", "zeroTest01ServiceImpl"),type_02("02", "zeroTest02ServiceImpl"),type_03("03", "zeroTest03ServiceImpl");private String type;private String pathClass; } …...
正则表达式 - 简介
正则表达式 - 简介 正则表达式(Regular Expression,简称Regex)是一种用于处理字符串的强大工具,它允许用户通过特定的模式(pattern)来搜索、匹配、查找和替换文本中的数据。正则表达式广泛应用于文本编辑器…...
【电机控制器】STC8H1K芯片——ADC电压采集
【电机控制器】STC8H1K芯片——ADC电压采集 文章目录 [TOC](文章目录) 前言一、ADC1.ADC初始化1.ADC_CONTR2.ADCCFG3.ADCTIM4.代码 2.ADC读取1.ADC_RES、ADC_RESL2.代码 3.VREF电压读取——MCU工作电压1.MCU工作电压计算公式2.代码 4.ADC被转换通道的输入电压读取1.ADC被转换通…...
图像格式中的 stride 和 pix stide
最近发现media codec 解码后 yuv 的拷贝时间很大,进一步分析后发现底层会一个像素一个像素拷贝,非常花时间。用过调整解码后图像的Stride(步幅)后直接进行内存块拷贝,可以大幅缩短拷贝时间 在YUV图像格式中,…...
传统POE供电P1摄像头实现
首先,我们来了解一下什么是poe供电?poe供电是一种通过网络线(通常为网线)传输电能的技术。这种技术可以省去马达、插头等传统供电设备,以及不需要另外的电源延长线,从而实现方便的供电。 那么,…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
