我有一个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再次出现,以此类推。我该怎么做呢?
好吧,我已经改变了你的一些变量名称,我已经删除了打印语句。让我们从建立一个函数开始,它将告诉你哪里需要分页。
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很方便。