我有一个350页的单个bills.But,其中有多个电费账单,每个账单都不是相同的length...some,只有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,以便仅当它再次找到regex“电力供应账单”时才拆分pdf。例如,如果第一页有这个正则表达式,然后第三页又有这个正则表达式,那么第1页和第2页应该生成1个pdf,然后第3页应该生成另一个。如果第四页又有这个正则表达式,那么第三页应该是一个单独的pdf,第四页应该是独立的,直到相同的正则表达式再次出现,依此类推。我该怎么做??
发布于 2020-06-12 20:54:54
好的,我已经更改了一些变量名,并且删除了print语句。让我们从构建一个函数开始,该函数将告诉您分页符需要在哪里。
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列表的开头弹出元素,并在浏览该文件时使用它们。
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与一些网页上的正则表达式。
https://stackoverflow.com/questions/62344312
复制相似问题