У меня есть много PDF-файлов, которые содержат повторы одного и того же слайда (или их разновидности) в каждом разделе. (т.е. каждый раздел имеет почти идентичные копии одного и того же слайда). Я хотел бы уменьшить PDF и лишить лишних копий, оставив только 1 страницу на раздел.
Вот пример PDF. По сути, я хотел бы автоматизировать то, что он делает.
Есть ли какой-нибудь инструмент, такой как pdftk, pdfcrop или ghostscript, который я мог бы использовать, чтобы сохранить только последнюю страницу каждого раздела в PDF? Лучше всего использовать инструмент командной строки!
Редактировать: загрузил мой собственный пример . Вот изображение , демонстрирующее проблему. Посмотрите, как есть 3 страницы, для которых «label» установлен в 2. У нас есть 3 страницы с индексом страницы 2 и 3 страницы с индексом страницы 3. Я хотел бы сохранить последнюю страницу с индексом страницы 2, и последняя страница с индексом 3. Я хотел бы сделать это для всех «разделов» PDF, как его называет Acrobat!
Я решил свою собственную проблему. Написал код 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)