我试图分裂一个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文件中,但只在这一页中得到,不确定如何包含范围。
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}")发布于 2022-05-18 17:49:01
免责声明:我是borb的作者,这个答案中使用的库。
我认为你的问题可以归结为两个常见的功能:
对于第一部分,中有一个很好的教程。你可以找到它,这里。为了完整起见,我将在这里重复其中一个例子。
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。
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()发布于 2022-05-22 07:09:05
你快拿到了!
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)https://stackoverflow.com/questions/72276991
复制相似问题