当前位置: 首页 > news >正文

解析 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中的位置信息。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • IOC、DI<4> Unity、AOP、MVCAOP、UnityAOP 区别
  • python编程实例 输出两个数之间的素数
  • Vue中实现在线画流程图实现
  • 解决后端限制导致前端配置跨域仍请求失败报504的问题
  • 如何在 Ubuntu 16.04 上安装和配置 Zabbix 以安全监控远程服务器
  • 应急响应-战后溯源反制社会工程学
  • C++ 实现图书馆资料管理系统
  • lvs集群、NAT模式和DR模式、keepalive
  • wifi中的PSR技术
  • Java Stream API详解:高效处理集合数据的利器
  • 休息时间c++
  • Java对象创建究竟是在栈上还是堆上??
  • FPGA上板项目(一)——点灯熟悉完整开发流程、ILA在线调试
  • 【C语言】《回调函数》详细解析
  • 探索最佳海外代理服务商!你知道哪些?
  • 【5+】跨webview多页面 触发事件(二)
  • canvas绘制圆角头像
  • emacs初体验
  • HTML-表单
  • JavaScript服务器推送技术之 WebSocket
  • Linux CTF 逆向入门
  • nodejs实现webservice问题总结
  • React Transition Group -- Transition 组件
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SpiderData 2019年2月13日 DApp数据排行榜
  • V4L2视频输入框架概述
  • Vue官网教程学习过程中值得记录的一些事情
  • 高度不固定时垂直居中
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 模型微调
  • 实现菜单下拉伸展折叠效果demo
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 应用生命周期终极 DevOps 工具包
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​批处理文件中的errorlevel用法
  • #QT(智能家居界面-界面切换)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (1)(1.13) SiK无线电高级配置(六)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (四)汇编语言——简单程序
  • (转)LINQ之路
  • (转)关于pipe()的详细解析
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .“空心村”成因分析及解决对策122344
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明