使用python将多页pdf文件拆分为多个pdf文件?

Posted

技术标签:

【中文标题】使用python将多页pdf文件拆分为多个pdf文件?【英文标题】:split a multi-page pdf file into multiple pdf files with python? 【发布时间】:2010-10-04 03:53:22 【问题描述】:

我想获取一个多页的 pdf 文件并为每页创建单独的 pdf 文件。

我已经下载了reportlab 并浏览了文档,但它似乎是针对 pdf 生成的。我还没有看到任何关于自己处理 PDF 文件的内容。

有没有简单的方法在 python 中做到这一点?

【问题讨论】:

【参考方案1】:
from PyPDF2 import PdfFileWriter, PdfFileReader

inputpdf = PdfFileReader(open("document.pdf", "rb"))

for i in range(inputpdf.numPages):
    output = PdfFileWriter()
    output.addPage(inputpdf.getPage(i))
    with open("document-page%s.pdf" % i, "wb") as outputStream:
        output.write(outputStream)

等等

【讨论】:

@user26294:您可能应该更新您的代码以使用 PyPDF2,它是 pyPdf 的积极维护的继任者。只需将from pyPdf import ... 替换为from PyPDF2 import ... pyPdf 不再维护,并已通过mstamy2.github.io/PyPDF2上的 pyPdf2 实现接管 用户with open("document-page%s.pdf" % (i+1), "wb") as outputStream:,如果您希望您的文件以从 1 而不是 0 开始的索引命名。 如果您有PdfReadError: Multiple definitions in dictionary at byte,您可以将输入的pdf变量修改为:pdf = PdfFileReader(open("document.pdf", "rb"), strict=False)【参考方案2】:

我在这里错过了一个解决方案,您将 PDF 拆分为由所有页面组成的两个部分,因此如果有人正在寻找相同的解决方案,我会附加我的解决方案:

from PyPDF2 import PdfFileWriter, PdfFileReader

def split_pdf_to_two(filename,page_number):
    pdf_reader = PdfFileReader(open(filename, "rb"))
    try:
        assert page_number < pdf_reader.numPages
        pdf_writer1 = PdfFileWriter()
        pdf_writer2 = PdfFileWriter()

        for page in range(page_number):
            pdf_writer1.addPage(pdf_reader.getPage(page))

        for page in range(page_number,pdf_reader.getNumPages()):
            pdf_writer2.addPage(pdf_reader.getPage(page))

        with open("part1.pdf", 'wb') as file1:
            pdf_writer1.write(file1)

        with open("part2.pdf", 'wb') as file2:
            pdf_writer2.write(file2)

    except AssertionError as e:
        print("Error: The PDF you are cutting has less pages than you want to cut!")

【讨论】:

【参考方案3】:

我知道该代码与 python 无关,但是我想发布这段简单、灵活且效果惊人的 R 代码。 R 中的 PDFtools 包在轻松拆分合并 PDF 方面非常出色。

library(pdftools) #Rpackage
pdf_subset('D:\\file\\20.02.20\\22 GT 2017.pdf',
           pages = 1:51, output = "subset.pdf")

【讨论】:

这里的页数是硬编码的。无论如何要自动做到这一点?【参考方案4】:

PyPDF2 包使您能够将单个 PDF 拆分为多个。

import os
from PyPDF2 import PdfFileReader, PdfFileWriter

pdf = PdfFileReader(path)
for page in range(pdf.getNumPages()):
    pdf_writer = PdfFileWriter()
    pdf_writer.addPage(pdf.getPage(page))

    output_filename = '_page_.pdf'.format(fname, page+1)

    with open(output_filename, 'wb') as out:
        pdf_writer.write(out)

    print('Created: '.format(output_filename))

来源:https://www.blog.pythonlibrary.org/2018/04/11/splitting-and-merging-pdfs-with-python/

【讨论】:

添加页码选择并将其包装在一个函数中:gist.github.com/shanecandoit/b3b90fa4532aeedce6400c0084981933

以上是关于使用python将多页pdf文件拆分为多个pdf文件?的主要内容,如果未能解决你的问题,请参考以下文章

将多页 PDF 转换为 PNG 并返回 (Linux)

Ghostscript错误使用pdfwrite将多页PS转换为多页PDF

将多页 PDF 转换为单个图像

DJVU格式文件转PDF小软件

多页Excel转换成PDF时如何保存为单独文件

如何拆分PDF,PDF拆分成多个PDF的方法