Деконкатенация PDF в Python - PullRequest
0 голосов
/ 09 мая 2019

Мне нужно деконкатенировать PDF, используя диапазон страниц. Например, у меня есть PDF-файл на 10 страниц, и я хочу сохранить только страницы со 2 по 6. На данный момент я использую следующий сценарий python для этого:

pdftk_args = ['pdftk']
pdftk_args.append(file)
pdftk_args.append('cat')
pdftk_args.append("%s-%s" % (page['index_start'], page['index_end']))
pdftk_args.append('output')
pdftk_args.append(page['pdf_filename'])

subprocess.check_call(pdftk_args)

Но я хочу найти альтернативу, чтобы избежать использования подпроцесса. Возможно ли это сделать с помощью нативной библиотеки Python?

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Для меня это выглядит как задача для pdfrw .Рассмотрим пример:

from pdfrw import PdfReader, PdfWriter
start = 2
end = 6
pages = PdfReader('inputfile.pdf').pages
outdata = PdfWriter('outputfile.pdf')
for pagenum in range(start,end+1):
    outdata.addpage(pages[pagenum-1])
outdata.write()

Я использовал этот пример из GitHub , создавая мой пример.Я предположил, что вы считаете pdf-страницы, начиная с 1, а под страницами со 2 по 6 подразумеваются страницы 2,3,4,5,6 (т.е. включая 6).

2 голосов
/ 09 мая 2019

Вы можете использовать PyPDF2 (pip install PyPDF2)

Предполагается, что вы индексируете от 1:

from PyPDF2 import PdfFileWriter, PdfFileReader

def split_pdf(input_path, output_path, pages):

    input = PdfFileReader(open(input_path, "rb"))
    output = PdfFileWriter()

    for page in pages:
        output.addPage(input.getPage(page - 1))

    with open(output_path, "wb") as stream:
        output.write(stream)

Использование:

pages = [1, 2, 3, 4] # for specific pages (1, 2, 3, 4)
pages = range(1, 5) # for a range (1, 2, 3, 4)
split_pdf("input.pdf", "output.pdf", pages)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...