即使裁剪了 pdf 文件,整个页面的内容仍然存在

Content of whole page is still present even after the pdf file is cropped

我在 pypdf2 的帮助下裁剪了一个 pdf 文件,但是当我尝试从裁剪后的 pdf 文件中提取文本时,我得到的是整个 pdf 页面的文本。我该如何解决?

裁剪后的 pdf 文件看起来像

但是当我运行命令pdftotext out8.pdf out.txt

我得到:

内容 介绍 第一部分. 两个系统

  1. 故事人物

  2. 注意力和努力

  3. 懒惰的控制器

  4. 联想机

  5. 认知轻松
  6. 规范、惊喜和原因
  7. 草率下结论的机器
  8. 判断是如何发生的
  9. 回答一个更简单的问题 第二部分。启发式和偏见
  10. 小数定律 <5>
  11. 锚点
  12. 可用性科学
  13. 可用性、情绪和风险
  14. Tom W 的专长

输出应该只有

  1. 故事人物

密码我运行

from PyPDF2 import PdfFileWriter, PdfFileReader
input1 = PdfFileReader(open("./data/in2.pdf", "rb"))
output = PdfFileWriter()

page = input1.getPage(1)
x = page.mediaBox.getUpperRight_x()
y = page.mediaBox.getUpperRight_y()

page.cropBox.lowerRight = (0,331-150)
page.cropBox.upperRight = (252,331)
output.addPage(page)

outputStream = open("out8.pdf", "wb")
output.write(outputStream)
outputStream.close()

听起来像是在从文本图层中提取文本。 PDF 可以有多个层——如果它是纯图像 PDF,那么它只会有图像层,但许多有一个图像层和一个文本层。文字层可以在图片前、图片后或不可见。

除非以特殊方式准备 PDF,否则文本层不会与图像中看到的文本对齐。如果您有一个多页 PDF,那么文本可能会被拆分到相关页面中,但不会跨页排列。

当您裁剪图像时,这不会影响文本层。当您提取文本时,它会从完整的文本层中抓取它。

为了仅获取裁剪部分的文本,您需要通过 OCR 引擎(例如 Tesseract)对其进行处理。 python 与 Tesseract 接口的包示例:pytesseract and tesserocr.

关于如何设置和运行处理的一些指南:

ocr-on-pdf-files-using-python
ocr-python-easy