реорганизация страниц PDF в заданной (злой) последовательности - попытка с PyPDF2 - PullRequest
0 голосов
/ 31 января 2019

У меня есть PDF-документ с заданным порядком страниц (скажем, 1 - это страница 1, а 2 - это страница 2)

поэтому в начале порядок страниц нормальный,

1,2,3,4,5,6,7,8,9 ....

но теперь мне нужно переставить страницы в PDF-документезлым способом напечатать это -> Я должен изменить последовательность страниц до необходимой последовательности :

1,2,3, 7,8,9,13,14,15, 4,5,6, 10,11,12, 16,17,18

, а затем то же самое со страницами 19 до 36, а затем снова с 37 до 54

Я попробовал это с пакетом Python PyPDF2 и смог получить каждую страницу example.pdf выводится как example_page- * .pdf , так что теперь страница 1 называется example_page-1.pdf , а страница 65 называется example_page-65.pdf .

Но как я могу объединить документы в необходимой последовательности ?

Моя попытка была сделана с помощью следующих манипуляций с кодом, представленным DZone (https://dzone.com/articles/splitting-and-merging-pdfs-with-python):

import os
from PyPDF2 import PdfFileReader
from PyPDF2 import PdfFileWriter

def pdf_splitter(path):

fname = os.path.splitext(os.path.basename(path))[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 = '/Users/timmy/Desktop/Print_Order_Problem/THE_ORDERED.pdf'

pdf_splitter(path)

объединение вместе

import glob

from PyPDF2 import PdfFileMerger



def merger(output_path, input_paths):
    pdf_merger = PdfFileMerger()
    file_handles = []

    for path in input_paths:
        pdf_merger.append(path)

    with open(output_path, 'wb') as fileobj:
        pdf_merger.write(fileobj)

if __name__ == '__main__':

    paths = glob.glob('THE_ORDERED_page_*.pdf')

    paths.replace()
    paths.sort()

    merger('pdf_merger1.pdf', paths)

Я надеюсь, что смогу объединить PDF-файлы в указанном порядке. Я знаю, что шаг paths.sort() необходимо изменить.

Я думаю, что это большая проблема, и я удивлен, насколько это сложно и увлекательно! Любая помощь очень ценится.

1 Ответ

0 голосов
/ 31 января 2019

Я бы не отвлекал вас от вашего прекрасного эксперимента PyPDF2.Ваш план звучит хорошо.Однако, для информации, на платформе с открытым исходным кодом утилита не-Python pdftk может переупорядочивать страницы.

После установки утилиты pdftk вы можете вызвать ее из командной строки примерно так::

pdftk in.pdf cat 1 2 3 7 8 9 13 14 15 4 5 6 10 11 12 16 17 18 output out.pdf
...