【问题标题】:How to detect colored blocks in a PDF file with python (pdfminer, minecart, tabula...)如何使用 python(pdfminer、minecart、tabula ...)检测 PDF 文件中的彩色块
【发布时间】:2023-01-12 05:22:23
【问题描述】:

我正在尝试从 PDF 文件中提取相当多的表格。这些表格用不同的颜色方便地“突出显示”,这使得眼睛很容易捕捉(参见示例屏幕截图)。

我认为检测那些彩色块的位置/坐标并使用坐标提取表格会很好。

我已经弄清楚了表格提取部分(使用 tabula-py)。所以这是阻止我的第一步。据我所知,minecart 是处理 PDF 文件中颜色和形状的最佳工具,但使用 OpenCV 进行全尺寸图像处理除外。但是我没有运气检测彩色框/块坐标。

将不胜感激任何帮助!

【问题讨论】:

    标签: python pdf shapes pdfminer


    【解决方案1】:

    我想我有一个解决方案:

    import minecart
    
    pdffile = open(fn, 'rb')
    doc = minecart.Document(pdffile)
    page = doc.get_page(page_num) # page_num is 0-based
    
    for shape in page.shapes.iter_in_bbox((0, 0, 612, 792 )):
        if shape.fill: 
            shape_bbox = shape.get_bbox()
            shape_color = shape.fill.color.as_rgb()
            print(shape_bbox, shape_color)
    

    然后我需要过滤颜色或形状大小......

    我之前的失败是因为使用了错误的页码 :(

    【讨论】:

      【解决方案2】:

      PyMuPDF 允许您提取所谓的“艺术线条”:页面上的矢量图。 这是一个“路径”词典列表(如 PDF 调用互连绘图),您可以从中为您选择感兴趣的子项。 例如。以下标识代表填充矩形的图形,不要太小:

      page = doc[0]  # load some page (here page 0)
      paths = page.get_drawings()  # extract all vector graphics
      filled_rects = [] # filled rectangles without border land here
      for path in paths:
          if path["type"] != "f"  # only consider paths with a fill color
              continue
          rect = path["rect"]
          if rect.width < 20 or rect.height < 20:  # only consider sizable rects
              continue
          filled_rects.append(rect)  # hopefully an area coloring a table
      # make a visible border around the hits to see success:
      for rect in filled_rects:
          page.draw_rect(rect, color=fitz.pdfcolor["red"])
      doc.save("debug.pdf")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-17
        • 2019-04-12
        • 1970-01-01
        相关资源
        最近更新 更多