如何将PyPDF的Rect坐标转换为Tabula的区域输入?
PyPDF与Tabula坐标转换方案
核心差异:坐标原点与y轴方向
- PyPDF:以页面左下角为原点,x向右递增,y向上递增,单位为点(pt,1pt=1/72英寸)
- Tabula:以页面左上角为原点,x向右递增,y向下递增,单位同样为点(pt)
转换公式
先通过PyPDF获取目标页面的高度(page.mediabox.height),记为page_height,再对PyPDF的Rect坐标做如下转换:
- Tabula区域的左上角y坐标 =
page_height- PyPDF Rect的右下角y坐标 - Tabula区域的右下角y坐标 =
page_height- PyPDF Rect的左上角y坐标 - x坐标直接沿用PyPDF的数值即可(微小误差属于文本识别精度问题,可忽略)
实例验证(以你的数据为例)
假设目标PDF页面高度为842(标准A4纸的点高度):
PyPDF坐标:左上(x=208, y=574),右下(x=494, y=585)
转换后Tabula坐标:
- 左上y = 842 - 585 = 257,和你给出的Tabula左上y=240接近(误差源于实际页面高度可能非标准值,或识别精度差异)
- 右下y = 842 - 574 = 268,和你给出的Tabula右下y=270匹配度很高
代码示例
from PyPDF2 import PdfReader # 读取PDF并获取目标页面 reader = PdfReader("your_file.pdf") page = reader.pages[0] page_height = float(page.mediabox.height) # PyPDF返回的Rect坐标(示例值) pypdf_x1, pypdf_y1 = 208, 574 pypdf_x2, pypdf_y2 = 494, 585 # 转换为Tabula可用的区域坐标(格式:[x1, y1, x2, y2]) tabula_region = [pypdf_x1, page_height - pypdf_y2, pypdf_x2, page_height - pypdf_y1] print("Tabula区域参数:", tabula_region)
内容的提问来源于stack exchange,提问作者Wallys Ferreira
相关产品推荐
相关产品推荐

