Сохранить только последнюю страницу каждого раздела в PDF?

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

Вот пример PDF. По сути, я хотел бы автоматизировать то, что он делает.

Есть ли какой-нибудь инструмент, такой как pdftk, pdfcrop или ghostscript, который я мог бы использовать, чтобы сохранить только последнюю страницу каждого раздела в PDF? Лучше всего использовать инструмент командной строки!

Редактировать: загрузил мой собственный пример . Вот изображение , демонстрирующее проблему. Посмотрите, как есть 3 страницы, для которых «label» установлен в 2. У нас есть 3 страницы с индексом страницы 2 и 3 страницы с индексом страницы 3. Я хотел бы сохранить последнюю страницу с индексом страницы 2, и последняя страница с индексом 3. Я хотел бы сделать это для всех «разделов» PDF, как его называет Acrobat!

4
задан 3 May 2019 в 15:43

1 ответ

Я решил свою собственную проблему. Написал код Python для контакта с ним. Получение PageLabels получает саму Маркировку, которая может или не может быть числовой и соответствующий индекс, где упомянутая Маркировка запускается. Я извлекаю индексы запуска маркировок и предполагаю, что конец раздела или маркировки сразу происходит 1 страница, прежде чем следующая маркировка/раздел запустится.

#!/usr/bin/python

from PyPDF2 import PdfFileWriter, PdfFileReader
import numpy as np

def printf(format, *values):
    print(format % values )

with open("in.pdf", "rb") as in_f:
    input1 = PdfFileReader(in_f)
    output = PdfFileWriter()

    numPages = input1.getNumPages()

    # The label indices occur @ even locations - generate array of form [0, 2, 4, 6, ...]
    indices = np.array(np.arange(0,np.shape(input1.trailer["/Root"]["/PageLabels"]["/Nums"])[0],2))

    # Assume end of preceding label = start of next label - 1
    pageIndices = np.array(input1.trailer["/Root"]["/PageLabels"]["/Nums"])[indices] - 1 

    # ignore the first index which is now a -1
    pageIndices = pageIndices[1:] 

    # there may be extra pages right after the start of the last label - add them
    pageIndices = np.append(pageIndices, np.arange(pageIndices[-1]+1, numPages))


    for _, v in enumerate(pageIndices):
        page = input1.getPage(v)
        output.addPage(page)

    with open("out.pdf", "wb") as out_f:
        output.write(out_f)
2
ответ дан 3 May 2019 в 15:43

Другие вопросы по тегам:

Похожие вопросы: