使用python将一个pdf分割成多个不同页数的pdf文件。

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

我有一个pdf文件,有350页,其中有多张电费单,但每张电费单的长度不一样,有的只有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中的字符串来确定一个regex,下面是我的代码。

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 "这个gex时才分割pdf。例如,如果第一页有这个gex,然后第3页又有这个gex,那么第1页和第2页应该是1个pdf,然后第3页应该是另一个。如果第4页又有这个regex,那么第3页应该是一个单独的pdf,而第4页以后应该是单独的,直到同样的regex再次出现,以此类推。我该怎么做呢?

python pypdf2
1个回答
0
投票

好吧,我已经改变了你的一些变量名称,我已经删除了打印语句。让我们从建立一个函数开始,它将告诉你哪里需要分页。

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文件,一些页面上的regex很方便。

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