首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDF范围分割

PDF范围分割
EN

Stack Overflow用户
提问于 2022-05-17 15:41:20
回答 2查看 145关注 0票数 0

我试图分裂一个PDF文件,通过找到一个关键词文本,然后抓住那个页面--关键词在上面,接下来是4页,所以总共5页,然后将它们从原始PDF中分离出来,放入他们自己的PDF中,这样新的PDF只会有这5页,然后再循环一遍,因为它会再次找到那个关键的文本,因为它在原来的PDF X中重复了更多次,然后抓取那个页面,再加上它自己的PDF之后的4页。

例:关键字在第7页上找到第一个循环需要第7页,也有第8-11页,并将这5页7-11放入pdf文件中,他们的下一个关键字在第12页上找到,所以需要第12页和第13-16页,所以在这一点上,它已经创建了两个单独的pdfs。

下面的代码找到关键字并将其放入自己的pdf文件中,但只在这一页中得到,不确定如何包含范围。

代码语言:javascript
复制
import os

from PyPDF2 import PdfFileReader, PdfFileWriter

path = "example.pdf"
fname = os.path.basename(path)
reader = PdfFileReader(path)
for page_number in range(reader.getNumPages()):
    writer = PdfFileWriter()
    writer.addPage(reader.getPage(page_number))
    text = reader.getPage(page_number).extractText()
    text_stripped = text.replace("\n", "")

    print(text_stripped)

    if text_stripped.find("Disregarded Branch") != (-1):
        output_filename = f"{fname}_page_{page_number + 1}.pdf"

        with open(output_filename, "wb") as out:
            writer.write(out)

        print(f"Created: {output_filename}")
EN

回答 2

Stack Overflow用户

发布于 2022-05-18 17:49:01

免责声明:我是borb的作者,这个答案中使用的库。

我认为你的问题可以归结为两个常见的功能:

  • 查找给定文本的位置
  • 从PDF中合并/拆分/提取页面

对于第一部分中有一个很好的教程。你可以找到它,这里。为了完整起见,我将在这里重复其中一个例子。

代码语言:javascript
复制
import typing
from borb.pdf.document.document import Document
from borb.pdf.pdf import PDF
from borb.toolkit.text.simple_text_extraction import SimpleTextExtraction


def main():

    # read the Document
    doc: typing.Optional[Document] = None
    l: SimpleTextExtraction = SimpleTextExtraction()
    with open("output.pdf", "rb") as in_file_handle:
        doc = PDF.loads(in_file_handle, [l])

    # check whether we have read a Document
    assert doc is not None

    # print the text on the first Page
    print(l.get_text_for_page(0))


if __name__ == "__main__":
    main()

此示例从PDF的第0页提取所有文本。当然,您可以简单地遍历所有页面,并检查给定页面是否包含要查找的关键字。

对于第二部分,您可以在示例存储库中找到一个很好的示例。这是链接。这个例子(以及随后的例子)将引导您了解Frankenstesteing来自不同来源的PDF的基础知识。

我在这里复制/粘贴的示例将向您展示如何通过从输入文档1和输入文档2中选择一个页面来构建PDF。

代码语言:javascript
复制
import typing
from borb.pdf.document.document import Document
from borb.pdf.pdf import PDF

import typing
from decimal import Decimal

from borb.pdf.document.document import Document
from borb.pdf.page.page import Page
from borb.pdf.pdf import PDF


def main():

    # open doc_001
    doc_001: typing.Optional[Document] = Document()
    with open("output_001.pdf", "rb") as pdf_file_handle:
        doc_001 = PDF.loads(pdf_file_handle)

    # open doc_002
    doc_002: typing.Optional[Document] = Document()
    with open("output_002.pdf", "rb") as pdf_file_handle:
        doc_002 = PDF.loads(pdf_file_handle)

    # create new document
    d: Document = Document()
    for i in range(0, 10):
        p: typing.Optional[Page] = None
        if i % 2 == 0:
            p = doc_001.get_page(i)
        else:
            p = doc_002.get_page(i)
        d.append_page(p)

    # write
    with open("output_003.pdf", "wb") as pdf_file_handle:
        PDF.dumps(pdf_file_handle, d)


if __name__ == "__main__":
    main()
票数 0
EN

Stack Overflow用户

发布于 2022-05-22 07:09:05

你快拿到了!

代码语言:javascript
复制
import os

from PyPDF2 import PdfFileReader, PdfFileWriter


def create_4page_pdf(base_pdf_path, start):
    reader = PdfFileReader(base_pdf_path)
    writer = PdfFileWriter()

    for i in range(4):
        index = start + i
        if index < len(reader.pages):
            page = reader.pages[index]
            writer.addPage(page)

    fname = os.path.basename(base_pdf_path)
    output_filename = f"{fname}_page_{start + 1}.pdf"
    with open(output_filename, "wb") as out:
        writer.write(out)
    print(f"Created: {output_filename}")


def main(base_pdf_path="example.pdf"):
    base_pdf_path = "example.pdf"

    reader = PdfFileReader(base_pdf_path)
    for page_number, page in enumerate(reader.pages):
        text = page.extractText()
        text_stripped = text.replace("\n", "")
        print(text_stripped)
        if text_stripped.find("Disregarded Branch") != (-1):
            create_4page_pdf(base_pdf_path, page_number)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72276991

复制
相关文章

相似问题

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