Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)

news2024/11/23 23:15:16

目录

安装所需库

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 起开始支持,定义页面上有意义的内容,包括可能存在的留白。

详情可以参考以下示意图:

https://pic3.zhimg.com/v2-d0ebf170f9c51e521866ab4aca3e09d2_1440w.jpg

以下是获取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页数、页面尺寸、旋转角度、页面方向、页面标签和页面边框等信息的全部内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业级RAG(检索增强生成)系统构建研究

— 摘要 检索增强生成(Retrieval-Augmented Generation,RAG)技术已经成为企业在知识管理、信息检索和智能问答等应用中的重要手段。本文将从RAG系统的现状、方法论、实践案例、成本分析、实施挑战及应对策略等方面,探讨企业如何…

前端学习八股资料CSS(二)

更多详情:爱米的前端小笔记,更多前端内容,等你来看!这些都是利用下班时间整理的,整理不易,大家多多👍💛➕🤔哦!你们的支持才是我不断更新的动力!找…

SAP 创建物料主数据报错:估价范围3010还没有生产式的物料帐簿

通过接口创建物料主数据(模拟MM01),报错如图: 处理方案1:(我的不行,提示已经是生产的) 将评估范围的物料分类账设置为生产 事务码: CKMSTART - 物料分类帐的生产开始 处理方案2&a…

扫雷游戏代码分享(c基础)

hi , I am 36. 代码来之不易👍👍👍 创建两个.c 一个.h 1:test.c #include"game.h"void game() {//创建数组char mine[ROWS][COLS] { 0 };char show[ROWS][COLS] { 0 };char temp[ROWS][COLS] { 0 };//初始化数…

leetcode 148. 排序链表 中等

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3: …

Elasticsearch中什么是倒排索引?

倒排索引(Inverted Index)是一种索引数据结构,它在信息检索系统中被广泛使用,特别是在全文搜索引擎中。倒排索引允许系统快速检索包含给定单词的文档列表。它是文档内容(如文本)与其存储位置之间的映射&…

excel-VLOOKUP函数使用/XVLOOKUP使用

多个窗口同时编辑表格,方便对照操作 使用开始-视图-新建窗口 将战区信息表的三列数据匹配到成交数据表上 可以使用VLOOKUP函数 有4个参数(必须要查找的值, 要查找的区域,要返回区域的第几列数据,一个可选参数查找匹…

netcore 静态文件目录浏览

环境:Net6 string dirPath "C:\\Users\\15298\\Pictures"; var fileProvider new PhysicalFileProvider(dirPath); app.UseStaticFiles(new StaticFileOptions {FileProvider fileProvider,RequestPath new PathString(("/files")) }); // …

1Panel修改PostgreSQL时区

需求 1Panel安装的PostgreSQL默认是UTC时区,需要将它修改为上海时间 步骤 进入PostgreSQL的安装目录 /opt/1panel/apps/postgresql/postgresql/data打开postgresql.conf文件 修改: log_timezone Asia/Shanghai timezone Asia/Shanghai保存后重启…

函数式接口和stream

函数式接口(Functional Interface)是Java 8引入的一个新特性,它只有一个抽象方法的接口。这意味着你可以将一个函数式接口作为参数传递给方法,或者将其实现为一个lambda表达式。函数式接口的主要目的是允许你以声明性方式处理操作…

Oracle 高水位线和低-高水位线(High Water Mark Low High Water Mark)

在Oracle的逻辑存储结构中(表空间-段-区-块),数据是存在数据段中的,通常一个表就是一个数据段,而段最终又由许多数据块组成。当数据存入数据块时,需要对块进行格式化,高水位线(High …

科技资讯|Matter 1.4 标准正式发布,低功耗蓝牙助力其发展

连接标准联盟(CSA)宣布推出最新的 Matter 1.4 版本,引入了一系列新的设备类型和功能增强,有望提高包括 HomeKit 在内的智能家居生态系统之间的互操作性。 设备供应商和平台能够依靠增强的多管理员功能改善多生态系统下的用户体验&…

python练习-Django web入门

python -m pip install --user requests使用API调用请求数据 处理API响应 import requestsclass Requests:def request(self):url "https://www.toutiao.com/stream/widget/local_weather/data/?city北京"headers {"Accept": "application/json;…

元器件封装

元器件封装类型 为什么越来越多用贴片元件,而不是插件元件 为什么越来越多用贴片元件,而不是插件元件 1.体积小、质量小、容易保存和运输; 2.容易焊接和拆卸。抗震效果好。 贴片元件不用过孔,用锡少。直插元件最麻烦的就是拆卸&a…

[SaaS] 数禾科技 AIGC生成营销素材

https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935

自顶向下逐步求精解决LeetCode第3307题找出第K个字符II题

3307.找出第K个字符II 难度:困难 问题描述: Alice和Bob正在玩一个游戏。最初,Alice有一个字符串word"a"。 给定一个正整数k和一个整数数组operations,其中operations[i]表示第i次操作的类型。 现在Bob将要求Alice按…

v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条

效果 导入组件 import ElImageViewer from "element-ui/packages/image/src/image-viewer"; components:{ ElImageViewer },模板使用组件 <el-image-viewerv-if"isShowPics":on-close"closeViewer":url-list"srcList"/>定义两…

Redis - 哨兵(Sentinel)

Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#xff0c;需要⼈⼯进⾏主从切换&#xff0c;同时⼤量 的客⼾端需要被通知切换到新的主节点上&#xff0c;对于上了⼀定规模的应⽤来说&#xff0c;这种⽅案是⽆法接受的&#xff0c; 于是Redis从2.8开始提…

使用wordpress搭建简易的信息查询系统

背景 当前有这样的一个需求&#xff0c;要实现让客户能够自助登录系统查询一些个人的信息&#xff0c;市面上没有特别符合我的需求的产品&#xff0c;经过一段时间的研究&#xff0c;想出了一个用wordpress实现简易信息查询系统&#xff0c;有两种方式。 方式一&#xff1a;使…

探索 Python HTTP 的瑞士军刀:Requests 库

文章目录 探索 Python HTTP 的瑞士军刀&#xff1a;Requests 库第一部分&#xff1a;背景介绍第二部分&#xff1a;Requests 库是什么&#xff1f;第三部分&#xff1a;如何安装 Requests 库&#xff1f;第四部分&#xff1a;Requests 库的基本函数使用方法第五部分&#xff1a…