使用 python 将一个 pdf 拆分为多个不同页面长度的 pdf

split a pdf into multiple pdfs of different page length using python

我有一个 pdf 有 350 页,其中有多个电 bills.But 每个帐单的长度都不一样......有些只有 1 页,其他有 2 或 3 页。我需要相应地拆分此 pdf。

我有以下用于将 pdf 拆分为单页的代码:

from PyPDF2 import PdfFileWriter, PdfFileReader

inputpdf = PdfFileReader(open("80....pdf", "rb"))

for i in range(inputpdf.numPages):
    output = PdfFileWriter()
    output.addPage(inputpdf.getPage(i))
    with open("80...-page%s.pdf" % i, "wb") as outputStream:
        output.write(outputStream)

我通过 Pypdf2 搜索字符串,在 pdf 中识别出一个正则表达式 以下是我的代码:

import PyPDF2
import re

object = PyPDF2.PdfFileReader("PDF.pdf")

NumPages = object.getNumPages()

for i in range(0, NumPages):
    PageObj = object.getPage(i)

    Text = PageObj.extractText() 
    #print(Text)
    if re.search(r"Bill of Supply for Electricity", Text):
        print("this is page " + str(i) + '\n First Page') 
        Regex = re.search(r"Bill of Supply for Electricity", Text).group()
        print(Regex)
    else:
        print("this is page " + str(i) + '\n Not First Page')

我找到了这个特定字符串开始的页面。现在我想相应地拆分 pdf,以便它仅在再次找到正则表达式 'Bill of Supply for Electricity' 时才拆分 pdf。 例如,如果第一页有这个正则表达式,然后第 3 页再次有这个正则表达式,那么第 1 页和第 2 页应该制作 1 个 pdf,然后第 3 页应该制作另一个 .如果第 4 页再次有此正则表达式,则第 3 页应该是一个单独的 pdf,第 4 页以后应该是单独的,直到再次出现相同的正则表达式,依此类推。我该怎么做?

好的,我已经更改了您的一些变量名称并删除了打印语句。让我们从构建一个函数开始,它会告诉您分页符需要在哪里。

def getPagebreakList(file_name: str)->list:
    pdf_file = PyPDF2.PdfFileReader(file_name)
    num_pages = pdf_file.getNumPages()
    page_breaks = list()

    for i in range(0, num_pages):
        Page = file.getPage(i)
        Text = PageObj.extractText() 

        if re.search(r"Bill of Supply for Electricity", Text):
            page_breaks.append(i)

    return page_breaks

接下来我们将从 page_breaks 列表的开头弹出元素,并在我们浏览 PDF 文件时使用它们。

from PyPDF2 import PdfFileWriter, PdfFileReader

inputpdf = PdfFileReader(open("80....pdf", "rb"))
num_pages = inputpdf.numPages
page_breaks = getPagebreakList('yourPDF.pdf')

i = 0
while (i < num_pages):
    if page_breaks:
        page_break = page_breaks.pop(0)
    else:
        page_break = num_pages
    output = PdfFileWriter()
    while (i != page_break + 1):
        output.addPage(inputpdf.getPage(i))
        i = i + 1
    with open("80...-page%s.pdf" % i, "wb") as outputStream:
        output.write(outputStream)

希望这能奏效。我显然没有办法进行测试,因为我手边没有带有正则表达式的长 PDF。

尝试相同但出现错误:

语法错误:'return' 函数外 [在 63 毫秒内完成]

python 中还有一个 nube 是一个 .py 文件吗