【问题标题】:Error while image extraction from PDF in python在python中从PDF中提取图像时出错
【发布时间】:2017-12-09 17:01:31
【问题描述】:

我正在尝试从 pdf 中提取所有格式的图像。我做了一些谷歌搜索,在 StackOverflow 上找到了this page。我尝试了这段代码,但我收到了这个错误:

我正在使用 python 3.x,这是我正在使用的代码。我试图通过 cmets 但无法弄清楚。请帮我解决这个问题。

这里是sample PDF.

import PyPDF2

from PIL import Image

if __name__ == '__main__':
    input1 = PyPDF2.PdfFileReader(open("Aadhaar1.pdf", "rb"))
    page0 = input1.getPage(0)
    xObject = page0['/Resources']['/XObject'].getObject()

    for obj in xObject:
        if xObject[obj]['/Subtype'] == '/Image':
            size = (xObject[obj]['/Width'], xObject[obj]['/Height'])
            data = xObject[obj].getData()
            if xObject[obj]['/ColorSpace'] == '/DeviceRGB':
                mode = "RGB"
            else:
                mode = "P"

            if xObject[obj]['/Filter'] == '/FlateDecode':
                img = Image.frombytes(mode, size, data)
                img.save(obj[1:] + ".png")
            elif xObject[obj]['/Filter'] == '/DCTDecode':
                img = open(obj[1:] + ".jpg", "wb")
                img.write(data)
                img.close()
            elif xObject[obj]['/Filter'] == '/JPXDecode':
                img = open(obj[1:] + ".jp2", "wb")
                img.write(data)
                img.close()

我正在阅读一些 cmets 并浏览链接,发现这个问题在 this page 上已解决。有人可以帮我实现吗?

【问题讨论】:

  • 您也可以提供输入 PDF 吗?如果我们可以重现您在使用的代码和文件时遇到的问题,那么提供帮助会容易得多。
  • @Gary02127 很抱歉回复晚了 Gary。我所在位置的网络已关闭。我尝试了多个 pdf 但同样的错误。但是,我用示例 PDF 编辑了问题。
  • 您正在使用的库 PyPDF2 似乎不支持 PDF 用于图像的过滤器。我不知道任何其他包含此过滤器的 PDF 阅读器,但它们很可能就在那里,我不是专家。
  • @physicalattraction 你真的很清楚出了什么问题。实际上,我提到的页面中有一些解决方案。但它会将我重定向到 GitHub。而且我不知道如何从 GitHub 安装库。你能帮忙吗?
  • 我解决了这个问题。谢谢大家。你们都给了我更好的画面。

标签: python python-imaging-library pypdf2 pdf-extraction


【解决方案1】:

这是PyPDF2 库错误。尝试卸载并安装带有更改的库,或者您可以在 GitHub 中查看更改并标记更改。我希望这会起作用。

【讨论】:

  • 这似乎还没有在各种 PDF 文件上得到解决。即使使用 pip3 重新安装库后,我仍然会收到此错误。 github 更改是否推送到 pypi 包存储库?
  • 这是库抛出此错误的示例 PDF:hbp.com/resources/SAMPLE%20PDF.pdf
  • 否,文件尚未合并。但是我已经为您合并了该文件,您可以下载并解压缩它。请从此处的文件手动安装。 1drv.ms/u/s!AnPgw7hXtChUhl3efS-Ty1cn74O8
  • 你好,要解决这个库必须从github页面的master分支手动安装的问题吗?使用pip install PyPDF2 安装它不起作用?
  • 对..建议的编辑尚未合并。我相信。
【解决方案2】:

截至今天,我仍然收到错误 NotImplementedError: unsupported filter /DCTDecode

我使用 Python3 3.7.5 安装了 PyPDF2 v 1.26.0。我的 Python 代码和上面的一样。

还有解决办法吗?

【讨论】:

    【解决方案3】:

    在撰写本文时,Python 3.9 和 PyPDF2 1.26 对我来说同样的错误。

    data = xObject[obj].getData()
    

    是问题所在。我的 PDF 有 JPG 图像,由于同样的 NotImlemented 异常,该行无法正常工作。 将 /DCTDecode 部分的行更改为;

    data = xObject[obj]._data
    

    有点为我工作。这会在 pdf 中提供纯 JPG 流。 因此,即为每个 if/filter 部分单独的 data = ... 行,虽然没有尝试过 JP2 部分。

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 2019-10-15
      • 2021-03-14
      • 2015-01-27
      • 2011-01-29
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多