【问题标题】:Tabula extract tables by area coordinatesTabula 按区域坐标提取表格
【发布时间】:2017-08-02 09:36:19
【问题描述】:

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

  1. 当您无法访问互联网时。
  2. 我认为预览应用会更准确,因为我体验过 Tabula 网页生成的不准确坐标。

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

【问题讨论】:

    标签: python pdf tabula


    【解决方案1】:

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

    Tabula 需要将区域指定为 topleftbottomright 距离。要获取它们,您可以测量从页面顶部到表格开头的距离等等。

    【讨论】:

    • 你能说得更具体点吗?我已经尝试过 Acrobat Reader DC 中的测量工具,我可以测量距离、周长和面积。但是,他们都不能按照 Tabula 的要求给我一个坐标。最多只能给出 x 和 y 轴长度。
    • 刚刚添加了 Measure 工具的使用示例。如果解决了您的问题,请标记为已接受。谢谢!
    • 这也是对有相同问题的人的另一种解释github.com/chezou/tabula-py/issues/13
    • 您提供的链接真的很有帮助,谢谢。 @JaquelinePassos
    【解决方案2】:

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

    在 Windows 中,您可以使用 Adob​​e Acrobat DC 和 Acrobat Reader DC 测量您的区域坐标

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

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

    如果您有 Adob​​e 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")
    

    【讨论】:

      【解决方案3】:

      阅读器仅在 PDF 创建者允许的情况下才允许测量。 而是找到了这个: https://graphicdesign.stackexchange.com/a/81666

      简要步骤:

      1. 下载 SumatraPDF。它也可作为 zip 使用,无需安装 需要。
      2. 使用 Sumatra 阅读器打开 PDF。
      3. 按'm' - 这个 在左上角显示光标位置。
      4. 使用表格 选项 -p 用于页面,-a 用于区域。 (上、左、下、右)

      【讨论】:

      • 在 SumatraPDF 我有一个光标位置 17,5 * 110,7 pt,但左上右下的值是多少?
      • @user1862965 - 将光标放在左上角和右下角以获取两个光标位置。另请参阅此答案stackoverflow.com/a/67918459/4341921
      【解决方案4】:

      我遇到了同样的问题,代码似乎忽略了区域标注。通过在命令行中包含“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))
      

      【讨论】:

        【解决方案5】:

        'top + height' 在这里接受的答案中缺少您可以调用的底部,尽管这不是从页面底部到表格的距离,而是从页面顶部表格底部的距离。

        所有必要的细节都在 wiki here 中进行了总结,但这是相关的部分:

        注意left、top、height和width参数并计算如下:

        y1 = 顶部

        x1 = 左

        y2 = 顶部 + 高度

        x2 = 左 + 宽度

        ..那么它们的顺序是:y1,x1,y2,x2

        可以提供一些关于完成工作的实用技巧。我的 pdf 查看器没有测量,我尝试了 linux 程序“screenruler”(sudo apt install screenruler),但这有点痛苦,还需要按照描述进行校准here

        然而,最后使用老式方法得到了最准确的结果。在 A4 纸上打印一页带有表格的页面,用透明尺子进行所有测量,估计为一毫米的几分之一,所有尺寸的标线。好吧,尺子的另一边只下降到 16 英寸,这不是细粒度的,所以用公制边,用袖珍计算器乘以 28.346456693 的厘米得到 pdf 单位。也许你身边有一个尺子,尺子的高度可达六分之一英寸;)

        列的测量都是从页面的左边开始的,只有列之间的内部分隔线,不包括表格最左边或最右边的线。

        您可能会发现对于非常压缩的列,您必须猜测从一列中的字符溢出到下一列的小尺寸。在这种情况下,您可以调整列尺寸并迭代直到正确为止。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-17
          • 2012-11-08
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多