110 votes

scinder un fichier pdf multi-pages en plusieurs fichiers pdf avec python ?

Je voudrais prendre un fichier pdf de plusieurs pages et créer des fichiers pdf séparés par page.

J'ai téléchargé reportlab et j'ai parcouru la documentation, mais elle semble destinée à la génération de pdf. Je n'ai encore rien vu sur le traitement des fichiers PDF eux-mêmes.

Y a-t-il un moyen facile de le faire en python ?

239voto

user26294 Points 1982
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)

etc.

11voto

Gibron Points 16

J'ai manqué ici une solution où vous divisez le PDF en deux parties composées de toutes les pages, donc j'ajoute ma solution si quelqu'un cherchait la même :

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!")

9voto

Nikita Jain Points 84

Le package PyPDF2 vous donne la possibilité de diviser un seul PDF en plusieurs.

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))

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

3voto

sandilya M Points 59

Je sais que le code n'est pas lié à python, cependant j'ai eu envie de poster ce morceau de code R qui est simple, flexible et fonctionne étonnamment. Le paquet PDFtools dans R est incroyable en divisant les PDF fusionnés à l'aise.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X