用 Python 阅读 PDF 包?

问题描述 投票:0回答:4

我有一个 pdf 作品集,由一个电子邮件线程组成,每封电子邮件都包含附件。我想阅读每封电子邮件中的文本并提取附件。但是,我找不到有关如何在 python 中阅读 pdf 作品集的信息。我尝试过使用库、PDFMiner 和 textract,但输出只是显示:“为了获得最佳体验,请在 Acrobat X 或 Adobe Reader X 或更高版本中打开此 PDF 组合。立即获取 Adobe Reader!”

有什么想法吗?谢谢!

python python-2.7 pdf
4个回答
2
投票

来自

poppler
实用程序的程序 pdfdetach 可以提取附件。

大多数类 UNIX 操作系统发行版都有一个

poppler-utils
软件包可用。您可以在 SourceForge 上找到 ms-windows 版本。

您可以使用

subprocess
模块从 Python 调用此程序。


0
投票

您可以使用

python-poppler

from poppler import load_from_file

pdf_document = load_from_file("portfolio.pdf")

if pdf_document.has_embedded_files():
    for attachment in pdf_document.embedded_files():
        print(attachment.data)

0
投票

我花了相当多的工作才使用@Roland Smith 和@ikreb 的答案从投资组合中提取嵌入文件。 python-poppler 有一个相当神秘的 API,上面的说明只是获取数据,而不是 pdf。 以下步骤详细介绍了如何使用 poppler 和 python 子进程从投资组合中获取文档:

  1. 您需要安装 Poppler。 它可以通过自制程序(或condo)安装在Mac 上。 您可能还需要 cmake (也与自制程序一起安装)。 以下是在 Windows 上安装的多种方法:如何在 Windows 上安装 Poppler?

  2. Poppler 是一个命令行程序,因此您不一定必须使用 python 来解决您的问题。 从命令行:

# this will pull the files from the portfolio and save them to the same directory
pdfdetach -saveall <file_name, no quotes>

# example:
pdfdetach -saveall my_portfolio.pdf
  1. 在Python中,使用子进程如下:
import subprocess

# pdfdetach will save all files from the portfolio to the same directory
subprocess.run(['pdfdetach', '-saveall', file_name.pdf])

# if you want to get a list of the files, use -list (see note below)
subprocess.run(['pdfdetach', '-list', file_name])

# it is also useful, within a script, to save to another folder using -o:
subprocess.run(['pdfdetach', '-saveall', os.path.join(os.path.join(os.getcwd(), my_portfolio.pdf), '-o', os.path.join(os.getcwd(), './out')])


关于列表输出的注释:输出将是一个子进程对象,必须对其进行解析以生成文件名的 python 列表。 这篇文章有几种方法可以做到这一点:python子进程输出到列表或文件


0
投票

不幸的是,许多可以处理 PDF 的软件包,包括

poppler
都不适合我,因为我无法在我正在使用的大学编码环境中安装它们。我也遇到了问题
PyMuPDF

Pikepdf 看起来是一个值得探索的选项。在文档中,他们写了为什么在某些环境中它可能比像

PyMuPDF
这样的包更受欢迎:

PyMuPDF 是一个具有令人印象深刻的功能的 PDF 库。然而,其 AGPL 许可证比 pikepdf 限制性大得多,而且它的依赖性 静态库使得很难包含在开源 Linux 中 或 BSD 发行版。

另一种非编码解决方案是简单地使用 Adobe 中的打印选项,然后选择将打开的文件夹中的所有文件打印到新的 PDF 中。

© www.soinside.com 2019 - 2024. All rights reserved.