首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python将pdf拆分为多个不同页长的pdf。

使用python将pdf拆分为多个不同页长的pdf。
EN

Stack Overflow用户
提问于 2020-06-12 20:30:01
回答 1查看 555关注 0票数 0

我有一个350页的单个bills.But,其中有多个电费账单,每个账单都不是相同的length...some,只有1页,其他人有2或3页。我需要相应地拆分这个pdf。

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

代码语言:javascript
复制
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中标识了一个正则表达式,下面是我的代码:

代码语言:javascript
复制
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,第四页应该是独立的,直到相同的正则表达式再次出现,依此类推。我该怎么做??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 20:54:54

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

代码语言:javascript
复制
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列表的开头弹出元素,并在浏览该文件时使用它们。

代码语言:javascript
复制
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与一些网页上的正则表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62344312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档