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供电是一种通过网络线(通常为网线)传输电能的技术。这种技术可以省去马达、插头等传统供电设备,以及不需要另外的电源延长线,从而实现方便的供电。 那么,…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...