Python 中的 PDF 处理

Python 被认为是一种极其灵活的编程语言,拥有广泛的库,是一种高级语言,具有易于阅读和编写的语法。Python 的范围正在不同的领域扩展,如机器学习、网络开发、网络安全、应用开发等等。因此,这种编程语言在程序员、工程师和开发人员中被广泛选择。

在下面的教程中,我们将在 Python 编程语言的帮助下处理 pdf。pdf,缩写为便携式文档格式,是一种包含文本、表格、图像等的文档文件格式,通常在我们需要保存无法进一步修改或易于共享或打印的文件时使用。 PDF 文件格式是由 Adobe 在 1993 年开发的,目的是以独立于软件、应用、操作系统和硬件的方式呈现包含格式化文本和图像的文档。

为了让我们更好地理解与使用 Python 处理 PDF 相关的所有内容,下面的教程被分成了不同的部分。

那么,让我们开始吧。

一些著名的 Python PDF 库

Python 提供了大量用于操作 PDF 文件的库。处理 pdf 时通常使用的一些著名库有:

  1. PDFMiner,
  2. PyPDF4,
  3. PyPDF2,
  4. Python-docx,
  5. PyMuPDF,

还有更多。

虽然在 Python 中使用不同的包来对 PDF 执行不同的功能操作,但我们将只讨论一些库的工作,如 PDFMiner、PyPDF2、PyMuPDF、reportlab、以及本教程中的其他一些库。 PyPDF2 被认为是广泛选择的与 PDF 一起工作的 Python 模块之一。该软件包易于使用,并提供各种功能。但是,当我们谈论文本提取时, PDFMiner 包更加精确和可靠。 PDFMiner 是专门为用户从 PDF 文件中提取文本而设计的。当我们考虑 PDF 文件操作时,有不同的场景,其中一个包在不同方面比另一个包更有效。因此,在本教程中,我们将根据 PDF 文件的舒适性和可靠性来讨论用于操作 PDF 文件的不同库。

使用 Python 从 pdf 中提取文本

pdf 由各种内容组成,如文本、表格、图像、表单等。这些文件是数据的图形解释。他们提供关于显示器或纸张确切位置的信息。然而,它们没有为句子或段落指定的逻辑结构,并且当显示的大小改变时,它们不能自我调整。 PDFMiner 包通过评估布局和预测文本和其他内容的位置来为用户执行工作。

PDFMiner 被认为是用来执行从 PDF 文件中提取文本等操作的健壮库之一。因此,在下一节中,我们将演示 PDFMiner 用于文本提取的用法。

首先我们要安装 PDFMiner 包。

安装 PDFMiner 包

我们可以使用以下命令安装 PDFMiner 包:

语法:


$ pip install pdfminer

一旦安装完成,我们将进入主要部分,使用 PDFMiner 库提取文本。

让我们考虑下面的例子,演示如何借助 Python 中的 PDFMiner 提取文本。

示例:


from io import StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
O_string = StringIO()
with open('my_file.pdf', 'rb') as input_file:
    my_parser = PDFParser(input_file)
    my_doc = PDFDocument(my_parser)
    rsrcmgr = PDFResourceManager()
    my_device = TextConverter(rsrcmgr, O_string, laparams = LAParams())
    my_interpreter = PDFPageInterpreter(rsrcmgr, my_device)
    for my_page in PDFPage.create_pages(my_doc):
        my_interpreter.process_page(my_page)
print(O_string.getvalue())

输出:

A Simple PDF File 
 This is a small demonstration .pdf file - 
 just for use in the Virtual Mechanics tutorials. More text. And more 
 text. And more text. And more text. And more text. 
 And more text. And more text. And more text. And more text. And more
 text. And more text. Boring, zzzzz. And more text. And more text. And
 more text. And more text. And more text. And more text. And more text.
 And more text. And more text.
 And more text. And more text. And more text. And more text. And more
 text. And more text. And more text. Even more. Continued on page 2 ...
 Simple PDF File 2
 ...continued from page 1\. Yet more text. And more text. And more text.
 And more text. And more text. And more text. And more text. And more
 text. Oh, how boring typing this stuff. But not as boring as watching
 paint dry. And more text. And more text. And more text. And more text.
 Boring.  More, a little more text. The end, and just as well.

说明:

在上面的代码片段中,我们已经从 IO 库中导入了 StringIO 模块,并从 PDFMiner 模块中导入了所需的函数和类。我们创建了一个 StringIO 对象,并使用 with 语句从目录中打开 pdf 文件。根据 PDFMiner 文档, PDFPageInterpreter 用于处理页面内容,而 PDFResourceManager 用于存储字体或图像等共享资源。 PDFPage 用于对数据进行逐页分析。参数加载字符、文本框、文本行、图像和图形的布局分析。在这些帮助下,文本转换器功能有助于将 PDF 文档转换为文本。

我们提供“my _ file . pdf”作为 PDF 文件,在 PDFMiner 模块的帮助下进行分析和执行。我们可以使用进程页面功能从 PDF 文件中提取文本。

最后,打印(文本)功能将从 PDF 中打印出提取的文本。因此,以这种方式,可以使用 PDFMiner 库从 PDF 文件中提取文本。

基于 Python 的 pdf 图像提取

每当我们想从 PDF 中提取图像时,我们可以利用 PyMuPDF。这个库使用了一个额外的模块, fitz,,这使得从 PDF 文件中提取图像变得更加容易。在开始直接使用模块之前,让我们安装所需的库。

安装 PyMuPDF 包

我们可以使用以下命令安装 PyMuPDF 包:

语法:


$ pip install pymupdf
$ pip install fitz

一旦安装完成,我们将进入主要部分,使用 PyMuPDF 库和 fitz 模块提取文本。

让我们考虑下面这个用 Python 演示图像提取的例子。

示例:


# PyMuPDF
import fitz
import io
from PIL import Image
# path to our input file
my_file = "file2.pdf" 
# Input PDF file
my_pdf = open(my_file)
for page_num in range(len(my_pdf)):
   cur_page = my_pdf[page_num]
   img = cur_page.getImageList()
   for image_num, image in enumerate(cur_page.getImageList()):
       # get the XREF of the image
       xref = image[0]
       # extract the image bytes
       cur_image = my_pdf.extractImage(xref)
       imgBytes = cur_image["image"]
       # get the image extension
       img_ext = cur_image["ext"]
       # load it to PIL
       image = Image.open(io.BytesIO(imgBytes))
       # save it to local disk
       image.save(open(f"page{page_num + 1}_img{image_num}.{img_ext}", "wb"))

输出:

[+] Found a total of 2 images in page 0
[+] Found a total of 2 images in page 1   

说明:

在上面的代码片段中,我们已经导入了所需的模块。然后,我们使用 fitz 模块加载了 PDF 文件。然后我们一页一页地找到图像列表。然后,我们将 pdf 中的图像字节转换为实际图像,并保存在本地。因此,以这种方式,我们已经从一个 PDF 文件中提取了图像。

使用 Python 从 pdf 中提取表格

与图像和文本提取相比,从 PDF 文件中提取表格有点容易。Python 提供了一个预定义的库,我们可以用它来提取表。因此,在我们开始实现代码之前,首先有必要安装这个库。

安装卡梅洛特图书馆

我们可以使用 pip 安装程序使用以下命令安装 camelot 模块:

语法:


$ pip install camelot

安装完成后,让我们继续用 Python 从 PDF 文件中提取表格。

示例:


import camelot
# reading the pdf file
my_tables = camelot.read_pdf("my_table.pdf")
print(my_tables[0].df)

说明:

在上面的代码片段中,我们已经导入了 camelot 库。然后,我们使用卡梅洛特库的 read_pdf() 功能从 PDF 文件中提取表格,并将它们作为列表存储在变量中。最后,我们使用表的索引值和 df 属性打印了一个提取的表。因此,我们已经成功地从 PDF 文件中提取了表格。

使用 Python 从 pdf 中提取网址

提取网址被认为是 Python 提供的另一个方便的功能。Python 有一个预定义的库,称为“pdfx”,,通常用于从 PDF 文件中提取网址。我们可以利用诸如 PDFMiner、PyPDF2、等库来提取文本,并使用正则表达式来找出网址。然而,这个过程是漫长而忙碌的。因此,为了缩短代码的长度,我们将使用 pdfx 库从 PDF 文件中提取网址。

安装 pdfx 库

我们可以使用 pip 安装程序使用以下命令安装 pdfx 库:

语法:


$ pip install pdfx

一旦安装完成,让我们考虑下面的例子来理解从 pdf 中提取网址。

示例:


import pdfx
# reading the PDF File
my_pdf = pdfx.PDFx("sample-url.pdf")
# get list of URLS
print(my_pdf.get_references_as_dict())

输出:

{'url': ['https://www.javatpoint.com/python-pass', 'https://www.javatpoint.com/python-tutorial', 'https://www.javatpoint.com/python-seaborn-library', 'https://www.javatpoint.com/', 'https://www.javatpoint.com/chatbot-in-python', 'https://www.javatpoint.com/python-if-else']}  

说明:

在上面的代码片段中,我们已经导入了 pdfx 库。然后我们使用 PDFx() 函数从目录中读取 PDF 文件。然后我们使用 get_references_as_dict() 函数以字典的形式提取输入 PDF 文件中所有可用的网址。

使用 Python 从 pdf 中提取页面作为图像

在本节中,我们将了解从图像形式的 PDF 文件中提取页面。为了完成任务,我们将需要另一个被称为 pdf2image 的简短库。当我们想要将 PDF 文件转换成图像时,通常会用到这个库。

让我们从安装库开始。

安装 pdf2image 库

我们可以使用 pip 安装程序的以下命令来安装 pdf2image 库:

语法:


$ pip install pdf2image

一旦安装完成,让我们考虑下面的例子来理解 pdf2image 库的工作。

示例:


from pdf2image import convert_from_path
my_pages = convert_from_path("my_file.pdf", 120) 
n = 0
# iterating through pages
for page in my_pages:
   n += 1
   page.save(f"output{n}.jpg", "JPEG")

说明:

在上面的代码片段中,我们从 pdf2image 库中导入了 convert_from_path 函数。然后,我们使用了导入的函数,其中我们提供了值 120。该值称为 DPI 或每英寸点数。数值越高,图像越清晰,尺寸越大。我们通过将页面保存为 JPEG 图像来遍历每一页。


原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/306324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-02 12:00
下一篇 2025-01-02 12:00

相关推荐

  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29

发表回复

登录后才能评论