Tabula根据区域坐标提取表格

14

我们可以通过指定PDF文档的坐标来提取其中的表格。对于Windows用户,要获取坐标,您需要将PDF文件上传到Tabula网页并导出包含坐标的脚本,然后将这些坐标输入到您的代码中。对于Mac用户,您只需使用预览应用程序和裁剪检查器。我想知道是否有任何第三方程序或插件可以为Windows用户提供此功能?在以下情况下,我认为这将非常有用:

  1. 当您没有互联网访问权限时。
  2. 我认为预览应用程序会更准确,因为我曾经遇到过从Tabula网页生成的不准确坐标。

如果有人能告诉我在哪里可以找到这样的东西,我将不胜感激。非常感谢。

5个回答

25

Tabula需要以PDF单位指定区域大小,PDF单位定义为1/72英寸。如果使用Acrobat Reader DC,您可以使用测量工具,并将其读数乘以72。

Tabula需要将区域指定为顶部左侧底部右侧距离。您可以测量从页面顶部到表格开头的距离等来获得这些距离。

图片描述


你能具体一点吗?我已经尝试了Acrobat Reader DC中的测量工具,可以测量距离、周长和面积。然而,它们都不能像Tabula所需的那样给出坐标。最多只能给出x轴和y轴的长度。 - Eric Choi
1
刚刚添加了“测量”工具的使用示例。如果解决了您的问题,请标记为已接受。谢谢! - Manuel Aristarán
1
这里还有另一个解释,适用于那些遇到相同问题的人:https://github.com/chezou/tabula-py/issues/13 - Jaqueline Passos
你提供的链接非常有帮助,谢谢。@JaquelinePassos - ah bon

9

Tabula可以理解以“点”形式表示的坐标数据。

在Windows系统中,您可以使用Adobe Acrobat DC和Acrobat Reader DC测量您的区域坐标。

如果您有Adobe Acrobat DC - 工具 >> 编辑PDF >> 选择您的区域并按Enter键 >> 更改单位为点

Top               100       pt = A
Left              50        pt = B
Cropped page size 370 x 225 pt = C x D

如果您拥有Adobe Acrobat DC或Acrobat Reader DC- 编辑 >> 首选项 >> 单位 >> 将页面单位更改为点 >> 确定 >> 工具 >> 测量

Top           = A = 100
Left          = B = 50
Areas  Width  = C = 370
Areas  Length = D = 225

你需要进行这个计算

area=[A,B,A+D,B+C]
area=[100,50,100+225,50+370]

在代码中

df=read_pdf(folder,area=[[100,50,325,420]] ,output_format="xlsx")

6

如果PDF创建者允许测量,Reader才允许进行测量。找到了这个替代方法:https://graphicdesign.stackexchange.com/a/81666

简要步骤:

  1. 下载SumatraPDF。它也可以作为zip文件下载,无需安装。
  2. 使用Sumatra阅读器打开PDF。
  3. 按下“m”键 - 这将在左上角显示光标位置。
  4. 使用tabula和选项-p(页面)和-a(区域)(上,左,下,右)。

在SumatraPDF中,我的光标位置为17.5 * 110.7 pt,但是左上角和右下角的值是多少? - user1862965
1
@user1862965 - 将光标放置在左上角和右下角以获取两个光标位置。还可以参考此答案 https://stackoverflow.com/a/67918459/4341921 - Deepak Garud

5

我有同样的问题,代码似乎忽略了区域标注。通过在命令行中包含"guess = False"来修复它。像这样(注意我正在使用1.2.1版本):

df = tabula.read_pdf(file_folder + file_name, 
                     guess=False, pages=1, stream=True , encoding="utf-8", 
                     area = (200.8125,64.6425,352.2825,496.1025), 
                     columns = (65.3,196.86,294.96,351.81,388.21,429.77))

3
'top + height'可以称为“bottom”,但是它并不是页面底部到表格的距离,而是从页面顶部到表格底部的距离。详细信息请参见wiki中的摘要:
注意左、上、高度和宽度参数,并计算以下内容:

y1 = top

x1 = left

y2 = top + height

x2 = left + width

然后按照这个顺序排列:y1,x1,y2,x2。
关于如何完成任务,可以提供一些实用的提示。我的PDF阅读器没有测量功能,尝试了Linux程序“screenruler” (sudo apt install screenruler),但是操作有点麻烦,需要根据这里描述的进行校准。
最终,我使用了老派的方法得出了最准确的结果。在A4纸上打印一个带表格的页面,使用透明尺子将所有尺寸测量到约为毫米的估计值,并绘制出所有维度的标尺线。不过,尺子的另一面只能测量到1/16英寸,这个精度没有公制尺好,需要使用口袋计算器将厘米乘以28.346456693转换成PDF单位。也许你有一把刻度更细的尺子。
列的测量都是从页面左边开始,只考虑列之间的内部分隔线,不包括表格最左边或最右边的线。
对于非常紧凑的列,您可能需要猜测小的尺寸。在这种情况下,您可以调整列的尺寸并进行迭代,直到达到正确的结果为止。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接