解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数

解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数

    • 1. 函数定义
    • 2. 函数说明
    • 3. 函数实现
    • 举例说明
    • 总结

今天,我们来学习一个有趣的Python函数。这个函数可以帮助我们转换PDF文档中的坐标。虽然听起来很复杂,但是我们可以通过一个简单的例子来理解它。

1. 函数定义

def rect_to_bbox(rect: Tuple[float, float, float, float],height: float,
) -> Tuple[float, float, float, float]:

这行代码定义了一个名为rect_to_bbox的函数。它需要两个参数:

  • rect: 这是一个包含4个小数的元组,代表PDF中一个矩形的坐标。
  • height: 这是一个小数,表示PDF页面的高度。

函数会返回一个新的包含4个小数的元组,这个元组代表转换后的坐标。

2. 函数说明

"""
Converts a PDF rectangle coordinates (x1, y1, x2, y2) to a bounding box in the specified
coordinate system where the vertical axis is measured from the top of the page.
"""

这段注释解释了函数的作用:它把PDF中的矩形坐标转换成一个新的坐标系统。在新的系统中,我们从页面的顶部开始测量竖直方向的距离。

3. 函数实现

x1, y2, x2, y1 = rect
y1 = height - y1
y2 = height - y2
return (x1, y1, x2, y2)

这是函数的主要部分。让我们一步步来看:

  1. x1, y2, x2, y1 = rect: 这行代码把rect中的4个数字分别赋值给x1, y2, x2, y1
  2. y1 = height - y1: 这行代码计算新的y1值。
  3. y2 = height - y2: 这行代码计算新的y2值。
  4. return (x1, y1, x2, y2): 最后,函数返回新的坐标。

举例说明

想象你有一张很大的纸(这就是我们的PDF页面),纸的高度是100厘米。

在这张纸上,有一个小方框,它的坐标是(10, 20, 30, 40)。这里:

  • 10 是左边缘到纸左边的距离
  • 20 是下边缘到纸底部的距离
  • 30 是右边缘到纸左边的距离
  • 40 是上边缘到纸底部的距离

但是,我们想要改变测量方式。我们想从纸的顶部开始测量,而不是从底部。

这时,我们就可以使用rect_to_bbox函数:

new_coordinates = rect_to_bbox((10, 20, 30, 40), 100)

函数会这样计算:

  1. x1 还是 10 (左边缘到纸左边的距离不变)
  2. 新的y1 = 100 - 40 = 60 (从顶部到上边缘的距离)
  3. x2 还是 30 (右边缘到纸左边的距离不变)
  4. 新的y2 = 100 - 20 = 80 (从顶部到下边缘的距离)

所以,new_coordinates的值会是(10, 60, 30, 80)。

这就像我们把纸翻了个个,从上面开始量尺寸,而不是从下面开始。但是左右的距离保持不变。

通过这种方式,我们就可以更方便地处理PDF中的坐标了!

总结

这个函数虽然看起来复杂,但它其实就是在帮我们"翻转"坐标系。它让我们可以更容易地理解和使用PDF中的位置信息。

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

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

相关文章

[Spring] SpringBoot基本配置与快速上手

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

Python中的魔术方法(如__init__、__str__等)的概念以及它们的作用。

Python中的魔术方法(也称为特殊方法或双下划线方法)是Python内置的一些具有特殊意义的方法。这些方法在Python的类定义中用于实现特定的功能,如对象初始化、属性访问、字符串表示、算术运算等。下面列举并解释几个常见的魔术方法:…

企业如何做好数据防泄密丨十个措施杜绝泄密事件

在当今数字化时代,信息泄露对企业构成了前所未有的威胁。企业的创新成果、专利技术和商业机密是其竞争力的核心。防止泄密可以确保这些关键资产不被非法复制或盗用。 客户数据是企业的宝贵资源。保护客户隐私不被泄露,不仅是法律要求,更是赢…

兼容问题---ios底部的安全距离css设置

在H5上适配安全区域&#xff1a;采用viewportenvconstant方案。 具体操作如下&#xff1a; 1. 需要将viewport设置为cover&#xff0c;env和constant才能生效。设置代码如下&#xff1a; <meta name"viewport" content"widthdevice-width,initial-scale1.…

两位软件工程师创业,开发出一款软件质量保证自主AI代理,融资总额超3000万美元

编译整理&#xff5c;TesterHome社区 来源&#xff5c;TechCrunch 随着生成式人工智能&#xff08;generative AI&#xff09;的出现&#xff0c;人工智能应用正在改变和重塑各行各业&#xff0c;并改变人们的工作方式。软件开发也不例外。 总部位于旧金山和东京的初创公司Aut…

前端导出pdf

async generatePDF() {const element this.$refs.contentToPrint; // 你想要转换成PDF的DOM元素// 使用html2canvas将DOM元素转换成canvasconst canvas await html2canvas(element);const imgData canvas.toDataURL(image/png);// 创建PDF并添加图片const pdf new jsPDF({o…

自动化立体仓库设计步骤:7步

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载 这份文件是关于自动化立体仓库设计步骤的详细指南&#xff0c;其核心内容包括以下几个阶…

怎么区分服务器的硬盘是ssd还是hdd?

区分服务器的硬盘是SSD还是HDD可以通过多种方法进行&#xff0c;包括操作系统内置工具、命令行工具以及第三方软件。以下是几种常见的方法&#xff1a; 操作系统内置工具 Windows 1.任务管理器 打开任务管理器(Ctrl Shift Esc)。 点击“性能”选项卡。 选择“磁盘”项。通常会…

孟德尔随机化与痛风4

写在前面 今天阅读的文献是多种暴露与某结局的孟德尔随机化&#xff0c;算是以量取胜了。 The effect of metabolism-related lifestyle and clinical risk factors on digestive system cancers in East Asian populations: a two-sample Mendelian randomization analysis …

淘宝商品评论电商API接口:帮你轻松挑选优质商品

随着互联网的快速发展&#xff0c;电子商务应运而生&#xff0c;并在短时间内取得了巨大的成功。其中&#xff0c;淘宝作为我国最大的在线购物平台之一&#xff0c;每天都有数以亿计的商品交易发生。然而&#xff0c;面对海量的商品信息&#xff0c;如何挑选出优质商品成为了一…

800 元打造家庭版 SOC 安全运营中心

今天,我们开始一系列新的文章,将从独特而全面的角度探索网络安全世界,结合安全双方:红队和蓝队。 这种方法通常称为“紫队”,集成了进攻和防御技术,以提供对威胁和安全解决方案的全面了解。 在本系列的第一篇文章中,我们将指导您完成以 100 欧元约800元左右的预算创建…

HTML最快速最简单

1、HTML 文档由 HTML 元素定义 2、HTML 元素语法 HTML 元素以开始标签起始&#xff0c;HTML 元素以结束标签终止空元素在开始标签中进行关闭&#xff08;以开始标签的结束而结束&#xff09;元素的内容是开始标签与结束标签之间的内容 3、空元素 空元素&#xff08;Void Ele…

音视频封装demo:将h264数据和aac数据封装(mux)成TS文件(纯手工,不依赖第三方开源库)

1、README a. demo使用 $ make clean && make DEBUG1 $ $ ./ts_mux_h264_aac Usage:./ts_mux_h264_aac avfile/test1_856x480_24fps.h264 24 avfile/test1_44100_stereo.aac out1.ts./ts_mux_h264_aac avfile/test2_720x480_30fps.h264 60 avfile/test2_48000_stereo…

无人机在交通管理方面的应用与潜力

随着智能化和数字化技术的发展&#xff0c;无人机已经成为智慧交通管理体系中的重要一环。无人机能够搭载各种专业设备&#xff0c;如超清摄像头、红外热成像摄像头、目标跟踪器等&#xff0c;从而完成多任务的数据采集和快速机动的任务执行。这些数据通过无线传输实时回传&…

LVS+Nginx高可用集群--基础篇(二)

1.虚拟主机-使用nginx为静态资源提供服务 静态资源服务器&#xff1a;主要包括两类资源&#xff0c;网页&#xff1b;图片&#xff0c;音频等&#xff1b; 也可以通过别名设置静态资源路径。 配置代码&#xff1a; server {listen 88;server_name localhost;locatio…

前端八股文 vue2和vue3的区别

主要有 4点的区别 框架区别 数据响应式的不同 生命周期函数的不同 api风格的不同 1.框架的区别 Vue 3 更倾向于使用 Vite 作为构建工具&#xff0c;基于 ES Modules 标准&#xff0c;提供更快的编译速度和简化开发过程。相比之下&#xff0c;Vue 2 通常使用 webpac…

Kudu分区策略

Kudu表的分区策略主要有三种&#xff1a;范围分区&#xff08;Partition By Range&#xff09;、哈希分区&#xff08;Partition By Hash&#xff09;和高级分区&#xff08;Partition By Hash And Range&#xff09;。这些策略都要求分区字段必须包含在主键中。 范围分区&…

关于使用Easyswoole 自定义MYSQL 连接池,一段时间后,操作接口,报数据库连接错误,然后在请求接口,就正常了

关于使用Easyswoole 自定义MYSQL 连接池,一段时间后,操作接口,报数据库连接错误,然后在请求接口,就正常了 首先我们来看看对应的easyswoole 数据库注册 Config/Mysq.php $mysql[mysql] []; $mysql[mysql][default] [name > default,host > 127.0.0.1,port > 330…

数据安全治理:从库级权限申请到表级权限申请

背景 随着数据安全意识的提高&#xff0c;企业越来越重视数据治理和权限管理。传统数仓大多对库级别进行读写授权&#xff0c;仅对人工标记的敏感库进行表级别授权&#xff0c;但由于敏感等级是由人为标记&#xff0c;错误率较高&#xff0c;故期望将权限申请流程细化到表级申…

树莓派_Pytorch学习笔记20:初步认识深度学习框架

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: ​ Python 版本3.7.3&#xff1a; ​ 本文很水&#xff0c;就介绍一下我以后的学习使用P…