关于拆分PDF和OCR识别

Posted

技术标签:

【中文标题】关于拆分PDF和OCR识别【英文标题】:Regarding Splitting PDF and OCR Recognition 【发布时间】:2021-07-14 08:15:12 【问题描述】:

我有很多 pdf 文件,它们是作品的扫描版本。我需要在 pdf 中拆分单个页面。

例如,如果有 1 页。我需要将一页拆分为页眉部分、页脚部分、主体部分和侧边部分。

什么编程语言和库给了我最大的灵活性来完成这样的任务,而无需我做所有繁重的工作。我对 Python 很熟悉。我知道 Python 的 PDF 和 OCR 库,但我找不到任何关于拆分单个页面的信息。

然后最后想将 pdf 页面的吐出部分传递给 OCR 以识别字符并输出到 csv 或文本文件。

提前谢谢你....

【问题讨论】:

【参考方案1】:

要以非常简单的方式拆分页面,我建议使用PDF Pluber,它是一个非常强大且有据可查的工具,用于从 PDF 中提取文本、表格、图像。 此外,它还有一个非常方便的功能,称为crop,允许您裁剪和提取您需要的页面部分。

作为一个例子,代码将是这样的(注意这将适用于任意数量的页面):

filename = 'path/to/your/PDF'
crop_coords = [x0, top, x1, bottom]
text = ''
pages = []
with pdfplumber.open(filename) as pdf:
    for i, page in enumerate(pdf.pages):
        my_width = page.width
        my_height = page.height
        # Crop pages
        my_bbox = (crop_coords[0]*float(my_width), crop_coords[1]*float(my_height), crop_coords[2]*float(my_width), crop_coords[3]*float(my_height))
        page_crop = page.crop(bbox=my_bbox)
        text = text+str(page_crop.extract_text()).lower()
        pages.append(page_crop)

坐标解释如下:

x0 = % Distance from left vertical cut to left side of page.
top = % Distance from upper horizontal cut to upper side of page.
x1 = % Distance from right vertical cut to right side of page.
bottom = % Distance from lower horizontal cut to lower side of page.

【讨论】:

嗨!感谢您的快速回复。我在 Jupyter Notebook 上试过这个。但是当我运行它时,它给了我一个值错误“代码”。我尝试将 x0、top、x1 和 bottom 的值输入为 20、20、20、20。('ValueError: Bounding box (Decimal('41920.000'), Decimal('96930.000'), Decimal('83840.000'), Decimal('161550.000')) 完全在父页面边界框之外(Decimal('0')、Decimal('0')、Decimal('2096.000')、Decimal('3231.000'))') 这些值是 1 的小数,例如百分比。因此,例如使用 [0, 0, 1, 1] 将不会裁剪页面(您将保留整个区域)。尝试输入值 嗨@anony,如果这个或任何答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

以上是关于关于拆分PDF和OCR识别的主要内容,如果未能解决你的问题,请参考以下文章

如何识别需要 OCR 的 PDF 文件?

制成双层pdf格式进行OCR识别时缺少两项不能OCR识别怎么办

进行OCR识别文本的时候提示PDF文档无法识别

基于Python实现对PDF文件的OCR识别

怎么用OCR图文识别软件在MS Office中创建PDF文件

Acrobat提示PDF页面大小超过最大尺寸,OCR识别文本失败