您的位置:

使用 Python 处理 PDF 文件

和当今世界一样,我们都熟悉 PDF 文件,因为它们是使用最广泛的数字文档格式之一。pdf 的完整形式是“可移植文档格式”,它使用“”。pdf "扩展名保存文档文件。这是独立于软件硬件或操作系统的,并且可以用于可靠地呈现或交换文档。

PDF 是 Adobe 发明的,现在这是国际标准化组织维护的开放标准。PDF 文件还可以包含表单域、音频-视频或其他业务逻辑的链接或按钮,以便与用户或观众进行更好的交互。

在本教程中,我们将讨论如何执行各种操作:

  • 如何从 PDF 中提取文本
  • 如何旋转 PDF 的页面
  • 如何将两个 PDF 合并在一起
  • 如何拆分一个 PDF 文件
  • 如何向 PDF 页面添加水印

我们可以通过使用一个简单的 Python 脚本来执行所有这些操作。

装置

为了与 PDF 文件进行交互,我们将使用第三方模块,即 PyPDF2 。PyPDF2 是一个内置的 Python 库,用作 PDF 工具包。该模块能够:

  • 它可以提取文档的信息,如标题、作者姓名等。
  • 它可以分割文档文件的页面。
  • 它可以裁剪 PDF 文档文件的页面。
  • 它可以将 PDF 文档文件中的多个页面合并为单个页面。
  • 它可以加密和解密 PDF 文件。

为了安装 PyPDF2,我们可以从命令行使用以下命令:


!pip3 install PyPDF2

这个模块的名称区分大小写,所以我们必须确保“y”是小写的,模块名称中的所有内容都是大写的。

使用 PyPDF2 模块对 PDF 文件的操作

在本节中,我们将讨论通过使用 Python 中的 PyPDF2 模块,我们可以对 PDF 文件执行的各种操作。

1.如何从 PDF 文档文件中提取文本。

我们可以使用 Python 中的 PyPDF2 模块从 PDF 文件中提取文本,方法如下。

进场:

为了使用 Python 从 PDF 文件中提取文本,我们将遵循以下步骤:

第一步:我们将以二进制模式打开名为‘exp . PDF’的 PDF 文件,并将文件对象保存为“ pdf_File_Object ”。


pdf_File_Object = open('exp.pdf', 'rb')

第二步:我们将为pypdf F2模块的【pdf Reader】类创建一个对象“ pdf_Reader ,然后我们将传递 PDF 文件对象,并获取用于读取 PDF 的对象。


pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

第三步:为了获取 PDF 文档文件的页数,我们将使用 numPages


print("No. of pages in the given PDF file: ", pdf_Reader.numPages)

第四步:我们将为“py PDF 2”的 PageObject 类创建一个对象“page _ Object”PDF 阅读器对象具有函数“getPage()”,该函数以页码为参数,返回页面的对象。


page_Object = pdf_Reader.getPage(0)

第五步:我们将使用提取文本,这是一个页面对象的函数,用于从 PDF 页面中提取文本。

第六步:最后,我们将关闭 PDF 文档文件对象。


pdf_File_Object.close()

代码:


import PyPDF2 as PDF

# Here we will create a pdf file object
pdf_File_Object = open('exp.pdf', 'rb')

# Here, we will creat a pdf reader object
pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

# Now we will print number of pages in pdf file
print("No. of pages in the given PDF file: ", pdf_Reader.numPages)

# Here, create a page object
page_Object = pdf_Reader.getPage(0)

# Now, we will extract text from page
print(page_Object.extractText())

# At last, close the pdf file object
pdf_File_Object.close()

输出:

No. of pages in the given PDF file:  10

GUIDELINES
*

FOR 

RE
-
OPENING OF CAMPUS 

IN VIEW OF COVID
-
19 PANDEMIC

(FOR 
STUDENTS
)

2021
-
22

这已经在输出中打印了 PDF 文件的第一页的文本。

2.如何旋转 PDF 文件页面

我们可以使用 Python 中的 PyPDF2 模块来旋转 PDF 文件的页面。

进场:

为了旋转给定 pdf 文件的页面,我们将使用以下步骤:

步骤 1: 我们将为原始 PDF 创建一个 PDF 阅读器对象。

第二步:我们将旋转的页面写入新的 PDF 文件。为了写入 PDF 文件,我们将使用的PDF writer类的对象


pdf_Writer = PDF.PdfFileWriter()

第三步:我们将迭代原始 PDF 文档文件的每一页。我们将获得 PDF 阅读器类的页面对象 getPage() 功能。然后我们将使用页面对象类的rotatelockwise()函数来旋转页面。


for page in range(pdf_Reader.numPages):
page_Object = pdf_Reader.getPage(page)
page_Object.rotateClockwise(rotation_1)
pdf_Writer.addPage(page_Object)

第 4 步:我们将通过传递旋转的页面对象,使用 PDF writer 类的 addPage() 函数来添加页面 PDF writer 对象。

第五步:然后,我们将把 PDF 页面写到新创建的 PDF 文件中。我们可以通过打开新的文件对象并使用 PDF writer 对象上的 write() 功能来编写 PDF 页面来实现这一点。


new_File = open(new_File_Name, 'wb')
pdf_Writer.write(new_File)

第六步:我们将关闭原来的 PDF 文件对象结束新创建的新文件对象。


pdf_File_Object.close()
new_File.close()

代码:


# Frst, we will import the modules
import PyPDF2 as PDF

def PDF_rotate(original_File_Name, new_File_Name, rotation_1):

    # Then, we will create a pdf File object of original pdf
    pdf_File_Object = open(original_File_Name, 'rb')

    # Then, we will create a pdf Reader object
    pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

    # Then we will create a pdf writer object for new pdf
    pdf_Writer = PDF.PdfFileWriter()

    # Now, we will rotate each page of the PDF document
    for page in range(pdf_Reader.numPages):

        # Then, we will create rotated page object
        page_Object = pdf_Reader.getPage(page)
        page_Object.rotateClockwise(rotation_1)

        # We will add the rotated page object to pdf writer
        pdf_Writer.addPage(page_Object)

    # Now we will open a new pdf file object
    new_File = open(new_File_Name, 'wb')

    # We will write the rotated pages to new file
    pdf_Writer.write(new_File)

    # At last, we will close the original pdf file object
    pdf_File_Object.close()

    # And now, we will close the new pdf file object
    new_File.close()

def main():

    # original pdf file name
    original_File_Name = 'exp.pdf'

    # new pdf file name
    new_File_Name = 'rotated_exp.pdf'

    # rotation angle
    rotation_1 = 270

    # calling the PDF_rotate function
    PDF_rotate(original_File_Name, new_File_Name, rotation_1)

if __name__ == "__main__":
    # calling the main function
    main()

输出:

原始文件:

旋转文件:

3.如何合并两个 PDF 文件。

我们可以通过使用 Python 中的 PyPDF2 模块来合并两个 PDF 文件。

进场:

为了在 Python 中合并两个 PDF 文件,我们将使用以下步骤:

第 1 步:为了合并两个 PDf 文件,我们将使用一个预构建的类, PyPDF2 的PDf merger


We will create an object called pdf_Merger of PDF merger class:
pdf_Merger = PDF.PdfFileMerger()

步骤 2: 然后,我们将使用 append() 将每个 PDF 的文件对象追加到 PDF 合并对象中


for pdf in pdf:
pdf_Merger.append(pdf)

第三步:最后,我们将使用 pdf 合并对象的写入方法将 pdf 页面写入输出 PDF 文件。


with open(output_1, 'wb') as K:
pdf_Merger.write(K)

代码:


# First, we will import the modules
import PyPDF2 as PDF

def PDF_merge(pdf, output_1):
    # Here, we will create pdf file merger object
    pdf_Merger = PDF.PdfFileMerger()

    # now, we will append pdfs one by one
    for pdf in pdf:
        pdf_Merger.append(pdf)

    # then, we will write combined pdf to output pdf file
    with open(output_1, 'wb') as K:
        pdf_Merger.write(K)

def main():
    # here, we will select the pdf files to merge
    pdf = ['exp.pdf', 'rotated_exp.pdf']

    # Here, we will create output pdf file name
    output_1 = 'combined_exp.pdf'

    # Now, we will call pdf merge function
    PDF_merge(pdf = pdf, output_1 = output_1)

if __name__ == "__main__":
    # At last we will call the main function
    main()

输出:

该代码的输出将是一个名为的组合 PDF 格式,它是通过合并exp.pdf和 rotate_exp.pdf 文件获得的。

4.如何拆分 PDF 文件

我们可以根据自己的需求,使用 PyPDF2 模块在 Python 中拆分 PDF 文档文件。

在这段代码中,我们将不使用新的函数或类,我们将使用简单的逻辑和迭代。pdf 的拆分将根据我们将要传递的 splits_1 列表来创建。

代码:


# First, we will import the modules
import PyPDF2 as PDF

def PDF_split(pdf_1, splits_1):
    # here, we will create an input pdf file object
    pdf_File_Object = open(pdf_1, 'rb')

    # here, we will create pdf reader object
    pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

    # Now we will start indexing of first slice
    start = 0

    # then we will start indexing of last slice
    end = splits_1[0]

    for g in range(len(splits_1) + 1):
        # we will create pdf writer object for (g + 1)th split
        pdf_Writer = PDF.PdfFileWriter()

        # output pdf file name
        output_pdf = pdf_1.split('.pdf')[0] + str(g) + '.pdf'

        # Now, we will add pages to pdf writer object
        for page_1 in range(start, end):
            pdf_Writer.addPage(pdf_Reader.getPage(page_1))

        # Here, we will write split pdf pages to pdf file
        with open(output_pdf, "wb") as K:
            pdf_Writer.write(K)

        # Now, we will interchange page split start position for next split
        start = end
        try:
            # then, we will set split end position for next split
            end = splits_1[g + 1]
        except IndexError:
            # then, we will set split end position for last split
            end = pdf_Reader.numPages

    # Now, we will close the input pdf file object
    pdf_File_Object.close()

def main():
    # pdf file to split
    pdf_1 = 'exp.pdf'

    # split page positions
    splits_1 = [2,4]

    # we will call PDF_split function to split pdf
    PDF_split(pdf_1, splits_1)

if __name__ == "__main__":
    # at last, we will call the main function
    main()

输出:

该代码的输出将生成 3 个新的 pdf 文件,它们是主 pdf 的拆分文件。我们可以签入 PDF 文件夹。它包含 3 个新的 pdf 文件。

5.如何给 PDF 页面添加水印。

我们可以使用 Python 中的 PyPDF2 模块为 PDF 文档文件的页面添加水印。

进场:

在此,我们将遵循与页面旋转示例相同的每一步,唯一的区别是:


wm_page_Object = add_watermark(user_watermark, pdf_Reader.getPage(page_1))

使用 add_watermark() 功能将页面对象转换为水印页面对象。

为了理解 add_watermark() 函数的作用,我们可以看到下面的例子:


wm_File_Object = open(wm_File, 'rb')
pdf_Reader = PDF.PdfFileReader(wm_File_Object) 
page_Object.mergePage(pdf_Reader.getPage(0))
wm_File_Object.close()
return page_Object

在本文中,首先,我们创建了 water_mark.pdf 文件的 pdf 阅读器对象。对于传递的页面对象,我们使用了 mergepage() 函数,传递了 water_mark pdf reader 对象第一页的页面对象。这将导致在传递的页面对象上覆盖 water_mark pdf。

代码:


# First, we will import the modules
import PyPDF2 as PDF

def add_watermark_1(wm_File, page_Object):
    # here, we will open watermark pdf file
    wm_File_Object = open(wm_File, 'rb')

    # Now, we will create pdf reader object of watermark pdf file
    pdf_Reader = PDF.PdfFileReader(wm_File_Object)

    # then, we will merge watermark pdf's first page with passed page object.
    page_Object.mergePage(pdf_Reader.getPage(3))

    # Here, we will close the watermark pdf file object
    wm_File_Object.close()

    # we will return watermarked page object
    return page_Object

def main():
    # Now, we will create watermark pdf file name
    user_watermark = 'water_mark.pdf'

    # original pdf file name
    original_File_Name = 'exp.pdf'

    # new pdf file name
    new_File_Name = 'watermarked_exp.pdf'

    # now, we will create pdf File object of original pdf
    pdf_File_Object = open(original_File_Name, 'rb')

    # here, we will create a pdf Reader object
    pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

    # create a pdf writer object for new pdf
    pdf_Writer = PDF.PdfFileWriter()

    # add watermark to each page
    for page_1 in range(pdf_Reader.numPages):
        # Now, we will create watermarked page object
        wm_page_Object = add_watermark(user_watermark, pdf_Reader.getPage(page_1))

        # then, we will add watermarked page object to pdf writer
        pdf_Writer.addPage(wm_page_Object)

    # new pdf file object
    new_File = open(new_File_Name, 'wb')

    # we will then write watermarked pages to new file
    pdf_Writer.write(new_File)

    # close the original pdf file object
    pdf_File_Object.close()
    # close the new pdf file object
    new_File.close()

if __name__ == "__main__":
    # call the main function
    main()

输出:

water_mark.pdf:

user_watermark.pdf 文件:

上述代码将生成一个 user_Watermark.pdf 文件,该文件带有 water_mark.pdf 文件的水印。

结论

在本教程中,我们讨论了如何使用 Python 及其模块的功能和方法在 PDF 文件上操作不同的功能。