Как объединить две страницы из файла PDF в одну страницу - PullRequest
1 голос
/ 10 июля 2019

У меня есть PDF, в котором всего 6 страниц изображений. Я хочу объединить страницы 1 и 2 в один PDF и т. Д. Для 3-6 страниц.

Я разделил все 6 страницPDF как индивидуальный PDF.

импорт ОС из PyPDF2 импорт PdfFileReader, PdfFileWriter

def pdf_splitter (путь): fname = os.path.splitext (os.path.basename (путь)) [0]

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

if name == ' main ': path = 'D: \ Tasks \ Samples \ fw9.pdf' pdf_splitter (path)

IЯ хочу знать, как объединить страницу 1 и 2 из fw9 в один файл PDF, который содержит только 1 страницу, половину страницы которой составляет страница 1 файла PDF fw9, а другую половину - страницу 2 файла PDF fw9. Я должен сделать это для всех 61-2 страницы как 1 pdf с 1 страницей, 3-4 страницы как другой pdf, который имеет только 1 страницу с обеими страницами на одной странице и т. д. Пожалуйста, помогите, если у кого-нибудь есть идеи, как это сделать.

1 Ответ

0 голосов
/ 10 июля 2019

Библиотека pyPDF2 также имеет объект PdfFileMerger, который должен делать именно то, что вы хотите.

Как в примере здесь вы можете просто создать PdfFileMerger, прочитать две страницы и поместить их в один файл.

Я немного изменил ваш скрипт, чтобы также создавать файлы со страницами 0-1, 2-3, 4-5 и т. Д. (Конечно, страница 0 - это первая страница, но нумерация Python начинается с 0)

import os
from PyPDF2 import PdfFileReader, PdfFileWriter, PdfFileMerger

def pdf_splitter(path): 

    fname = os.path.splitext(os.path.basename(path))[0]

    pdf = PdfFileReader(path)
    input_paths = []
    for page in range(pdf.getNumPages()):
        pdf_writer = PdfFileWriter()
        pdf_writer.addPage(pdf.getPage(page))
        output_filename = '{}_page_{}.pdf'.format(fname, page+1)
        input_paths.append(output_filename)
        with open(output_filename, 'wb') as out:
            pdf_writer.write(out)

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

        # every 2 pages! 
        # Change the two if you need every other number of pages!
        if page % 2 == 1:
            pdf_merger = PdfFileMerger() #create pdfilemerger
            for path in input_paths: 
                pdf_merger.append(path) #read the single pages

            # we call it pages_N-1_N, so first would be pages_0_1!
            output_path = '{}_pages_{}_{}.pdf'.format(fname, page-1, page)
            with open(output_path, 'wb') as fileobj:
                pdf_merger.write(fileobj) # write the two pages pdf!

            input_paths = []

if __name__ == '__main__': 

    path = 'D:\Tasks\Samples\fw9.pdf' 
    pdf_splitter(path)

Это то, что вы хотели?

Это сначала создаст один PDF-файл для каждой страницы, а затем объединит их со 2 по 2. Создание одного PDF-файла также может быть пропущено, но я не был уверен, хотите вы этого или нет.

...