「Python-PDF 专栏」通过 PyPDF2 打开并获取PDF的信息

通过 PyPDF2 打开并获取PDF的信息

  • 一、PDF 打开文档
    • 1. open()函数的功能和用法
    • 2. PyPDF2.PdfReader的功能、用法和原理
  • 二、获取 PDF 的各种信息
    • 1. 获取 PDF 的总页数
    • 2. 获取 PDF 的页面大小
    • 3. 获取 PDF 的书签
    • 4. 获取 PDF 的作者、主题、创建日期等
    • 5. 获取 PDF 的文本

一、PDF 打开文档

  1. 导入必要的模块和函数:首先,我们需要导入PyPDF2库,以便能够访问其中的功能。使用以下代码将PyPDF2导入到Python脚本中:
import PyPDF2

2.打开PDF文件:使用open()函数,我们可以打开一个PDF文件,并创建一个PDF文件对象,以便后续操作。该函数接受一个文件名或文件对象作为输入参数。例如,如果我们有一个名为"example.pdf"的PDF文件:

# 使用'rb'模式打开文件,表示以二进制模式读取文件
pdf_file = open('example.pdf', 'rb')  

在这里,我们使用了二进制模式打开文件,因为PDF文件是二进制文件。

  1. 创建PDF阅读器对象:使用PdfReader()函数,我们可以创建一个PDF阅读器对象,用于读取和解析PDF文件内容。
pdf_reader = PyPDF2.PdfReader(pdf_file)

至此,我们已经完成了使用PyPDF2打开PDF文件的过程。然后我们简要说明一下涉及到的各个函数的使用方法和原理:

  • open()函数:
    用于打开文件,返回一个文件对象。第一个参数是文件名或文件路径,第二个参数是文件打开模式(例如,'r’表示读取模式,'w’表示写入模式,'rb’表示以二进制模式读取等)。

  • PdfReader()函数
    -用于创建一个PDF阅读器对象,接受一个文件对象作为输入。该函数会解析PDF文件的结构,并将内容存储在一个数据结构中,以便后续操作。

1. open()函数的功能和用法

open()函数用于打开文件,并返回一个文件对象,以便进行后续的操作。在PyPDF2库中,我们通常使用open()函数来打开PDF文件。

语法:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明

  • file: 要打开的文件名或文件路径。
  • mode: 打开文件的模式。可以是以下值之一:
    • ‘r’: 读取模式 (默认)。
    • ‘rb’: 以二进制模式读取。
    • ‘w’: 写入模式。
    • ‘wb’: 以二进制模式写入。
    • ‘a’: 追加模式。
    • ‘ab’: 以二进制模式追加。
    • ‘x’: 创建一个新文件并写入(如果文件已存在,则抛出FileExistsError异常)。
    • ‘xb’: 以二进制模式创建一个新文件并写入。
  • buffering: 设置缓冲大小。如果为0,则不进行缓冲;如果为1,则进行行缓冲;如果为大于1的整数,则表示缓冲区大小。
  • encoding: 文件的编码方式。
  • errors: 编码错误处理方式。
  • newline: 控制换行符的处理。
  • closefd: 如果为True(默认),则在文件关闭时关闭文件描述符;如果为False,则不关闭文件描述符。
  • opener: 用于打开文件的自定义文件打开器(通常不需要使用)。

使用示例

# 打开一个文本文件并读取内容
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

# 打开一个二进制文件并读取内容
with open('example.pdf', 'rb') as file:
    pdf_content = file.read()
    print(pdf_content)

2. PyPDF2.PdfReader的功能、用法和原理

PyPDF2.PdfReader类用于创建一个PDF阅读器对象,以便读取和解析PDF文件的内容。通过使用PdfReader()函数,我们可以创建该对象,并进而获取PDF文件的页面数量、页面内容等信息。

创建PdfReader对象

pdf_reader = PyPDF2.PdfReader(file)

参数说明
file: 要读取的PDF文件名或文件对象。该参数可以是一个文件名的字符串,也可以是一个已经打开的文件对象。

原理
当我们创建PdfReader对象时,PyPDF2会解析PDF文件的结构,并将文件内容存储在内存中的数据结构中。这个数据结构允许我们获取页面数量以及访问每一页的内容。PdfReader对象不会立即加载整个PDF文件,而是在需要时逐页加载。这种延迟加载的方式可以节省内存,并使得处理大型PDF文件更加高效。

二、获取 PDF 的各种信息

1. 获取 PDF 的总页数

步骤1:导入PyPDF2库

首先,我们需要导入PyPDF2库,这样我们才能使用它来处理PDF文件。

# 导入PyPDF2库
import PyPDF2

步骤2:定义获取PDF总页数的函数

接下来,我们定义一个函数get_pdf_page_count,该函数接受一个名为pdf_path的参数,这是要打开的PDF文件的路径。在函数内部,我们将打开PDF文件,并使用PyPDF2库来获取PDF的总页数。

def get_pdf_page_count(pdf_path):
    # 打开PDF文件,并以二进制模式读取文件内容
    with open(pdf_path, 'rb') as pdf_file:
        # 创建一个PdfReader对象,用于读取PDF文件
        pdf_reader = PyPDF2.PdfReader(pdf_file)

        # 获取PDF的总页数,使用len()函数获取pages列表的长度
        total_pages = len(pdf_reader.pages)

        return total_pages

步骤3:调用函数并获取PDF总页数

在主程序中,我们调用刚刚定义的函数,并将获取到的PDF总页数打印出来。

# 调用函数并获取PDF的总页数
pdf_path = r'E:\UserData\Desktop\测试用的.pdf'  # 替换为你的PDF文件路径
total_pages = get_pdf_page_count(pdf_path)

# 打印总页数
print(f'PDF 的页数为: {total_pages}')

将完整代码放在一起

将上述三个步骤组合在一起,就是完整的获取PDF总页数的Python代码。

# 导入PyPDF2库
import PyPDF2

# 定义一个函数来获取PDF的总页数
def get_pdf_page_count(pdf_path):
    # 打开PDF文件,并以二进制模式读取文件内容
    with open(pdf_path, 'rb') as pdf_file:
        # 创建一个PdfReader对象,用于读取PDF文件
        pdf_reader = PyPDF2.PdfReader(pdf_file)

        # 获取PDF的总页数,使用len()函数获取pages列表的长度
        total_pages = len(pdf_reader.pages)

        return total_pages

# 调用函数并获取PDF的总页数
pdf_path = r'E:\UserData\Desktop\测试用的.pdf'  # 替换为你的PDF文件路径
total_pages = get_pdf_page_count(pdf_path)

# 打印总页数
print(f'PDF 的页数为: {total_pages}')

2. 获取 PDF 的页面大小

步骤 1:导入所需的库
我们需要导入PyPDF2库来处理PDF文件。我们还需要使用Python的内置模块io来处理文件的输入和输出。代码示例如下:

import PyPDF2
import io

步骤 2:打开PDF文件
使用PyPDF2库,我们可以打开一个PDF文件,并读取其内容。首先,我们需要以二进制模式打开PDF文件,然后使用PyPDF2的PdfReader()函数来读取该文件。下面是相关代码:

# 以二进制模式打开PDF文件
with open('your_pdf_file.pdf', 'rb') as file:
    # 创建一个PdfReader对象来读取PDF内容
    pdf_reader = PyPDF2.PdfReader(file)

步骤 3:获取PDF页面大小
使用 PyPDF2的getPage() 函数获取PDF页面,并使用页面对象的mediaBox属性来获取页面的大小。mediaBox是一个元组,其中包含页面的左下角坐标 (x1, y1) 和右上角坐标 (x2, y2)。通过计算这些坐标差,我们可以获得页面的宽度和高度。

以下是获取PDF页面大小的完整代码:

#以二进制模式打开PDF文件
with open('your_pdf_file.pdf', 'rb') as file:
    # 创建一个PdfReader对象来读取PDF内容
    pdf_reader = PyPDF2.PdfReader(file)

    # 获取第一页(在PyPDF2中,页码从0开始)
    page_number = 0
    page = pdf_reader.pages[page_number]

    # 获取页面的尺寸
    mediabox = page.mediabox
    x1, y1, x2, y2 = mediabox

    # 计算页面宽度和高度
    page_width = x2 - x1
    page_height = y2 - y1

    # 输出页面尺寸
    print(f"页面宽度:{page_width} 像素")
    print(f"页面高度:{page_height} 像素")

3. 获取 PDF 的书签

PyPDF2库通过outline属性来提取书签信息,返回的是一个书签树。以下代码演示了如何获取和展示PDF文件的书签信息:

import PyPDF2

def print_bookmarks(bookmark_list, level=0):
    for item in bookmark_list:
        # 获取书签的标题和页面编号
        title = item.title
        page_num = item.page.get('/Page', None)
        if page_num is not None:
            # 由于PyPDF2从0开始计数页面,因此需要加1以与我们的认知相符
            page_num += 1
        else:
            page_num = 'N/A'
        
        # 输出书签信息
        print(f"{'  ' * level}- {title}, Page: {page_num}")

        # 递归地处理子书签
        if item.children:
            print_bookmarks(item.children, level + 1)

# 获取PDF文件的书签
with open('E:\\UserData\\Desktop\\2022—2023学年人教版数学八年级上册三角形的高、中线与角平分线同步练习题含答案.pdf', 'rb') as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    # 获取PDF文件的书签树
    bookmark_root = pdf_reader.outline
    # 打印书签
    print("PDF书签:")
    print_bookmarks(bookmark_root)

4. 获取 PDF 的作者、主题、创建日期等

除了书签,PDF文件还包含了丰富的元数据信息,如作者、创建日期、主题等,使用metadata属性可以获取PDF文件的元数据信息,例如作者、创建日期、主题等。以下代码演示了如何获取和展示PDF文件的元数据信息:

import PyPDF2

# 获取PDF文件的元数据
with open('E:\\UserData\\Desktop\\2022—2023学年人教版数学八年级上册三角形的高、中线与角平分线同步练习题含答案.pdf', 'rb') as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    # 获取PDF文件的元数据
    pdf_metadata = pdf_reader.metadata
    
    # 输出PDF元数据信息
    print("PDF元数据:")
    for key, value in pdf_metadata.items():
        print(f"{key}: {value}")

5. 获取 PDF 的文本

要从PDF文件中提取文本内容,我们可以使用PyPDF2库的PdfReader和PageObject。这些类提供了访问PDF文件和页面内容的方法。

  1. 首先,我们需要指定要处理的PDF文件路径,然后按照以下步骤提取文本内容:

  2. 打开PDF文件:使用Python的open函数打开PDF文件,并以二进制读取模式打开文件。

  3. 创建PdfReader对象:使用PyPDF2.PdfReader类创建一个PdfReader对象,将打开的PDF文件传递给它。这个对象允许我们访问PDF文件的内容。

  4. 访问页面:通过pdf_reader.pages属性可以访问PDF的所有页面。每个页面都是PageObject类型的对象,我们可以通过索引或迭代器来访问它们。

  5. 提取文本:使用PageObject的extract_text()方法可以从页面中提取文本内容。这将返回一个包含页面文本的字符串。

以下是详细的示例代码,演示了如何提取PDF文件的文本内容:

import PyPDF2

# 指定PDF文件路径
pdf_file_path = r'E:\UserData\Desktop\形容词副词专项.pdf'

# 打开PDF文件
with open(pdf_file_path, 'rb') as pdf_file:
    # 创建一个PdfReader对象
    pdf_reader = PyPDF2.PdfReader(pdf_file)

    # 获取PDF的页数
    num_pages = len(pdf_reader.pages)
    print(f'总页数: {num_pages} 页')

    # 逐页提取文本内容
    for page_num, page in enumerate(pdf_reader.pages, start=1):
        # 提取页面文本内容
        text = page.extract_text()

        # 打印提取的文本内容
        print(f'第{page_num}页文本内容:')
        print(text)

你可能感兴趣的:(Python-PDF,python,pdf)