Как извлечь и / или удалить последнюю страницу из множества PDF-файлов?


14

Один из наших поставщиков начал прикреплять ненужное огромное изображение к последней странице PDF-файлов, которую мы получаем от них. Мне нужно обрезать это. Однако у нас их сотни, поэтому входить вручную запрещено. Каковы наилучшие способы извлечения, а затем удаления (желательно сначала одного, а затем другого; мне все еще нужно подтвердить с помощью размера файла, что я не удаляю тот, у которого нет изображения), последней страницы PDF автоматически? ОС это Linux.

Я могу извлечь его, используя ghostscript, с чем-то вроде этого gs -dFirstPage=5 -dLastPage=5, но мне нужно автоматизировать это, я не могу пройти и вручную узнать, какой номер последней страницы.

Есть идеи?

Изменить: чтобы уточнить, я просто хочу разделить / удалить последнюю страницу. Не изображение в нем, акцизный период последней страницы.


1
Посмотрите pdftk- я уверен, что это можно сделать, чтобы работать в целом для такого рода задач.
Даниэль Андерссон


2
Не отдаленно дубликат этого.
Андрей

Я чувствую, что должен уточнить, хотя: я не заинтересован в удалении изображения на последней странице. Я заинтересован в удалении последней страницы, точка.
Андрей

1
Связанный вопрос с несколькими различными ответами на Ask Ubuntu: askubuntu.com/questions/221962/…
TuringTux

Ответы:


2

Как уже заметил @Daniel Andersson, это легко сделать с помощью pdftk:

pdftk input.pdf cat end-1 output temp.pdf
pdftk temp.pdf  cat end-2 output output.pdf
rm temp.pdf

Я не знаю, можно ли это сделать одним вызовом pdftk, хотя ...

Изменить : вы можете объединить его с ответом и использовать таноска (в Bash):

pdftk input.pdf cat 1-$((last-1)) output output.pdf

когда вы уже извлекли последнюю страницу в переменную $last.


Пример не работает. Нашел ответ @Sid Steward, чтобы работать лучше.
Reado

14

Чтобы еще больше улучшить ответ @ eldering, в pdftk версии 1.45 и выше есть возможность ссылаться на страницы в обратном порядке, добавляя строчную букву r к номеру страницы. Последняя страница в PDF - это r1, предпоследняя страница - это r2 и т. Д.

Например, единственный вызов pdftk:

pdftk input.pdf cat 1-r2 output output.pdf

удалит последнюю страницу из input.pdf - длина входного файла должна быть не менее двух.

Чтобы извлечь только последнюю страницу PDF-файла и проверить его размер, запустите:

pdftk input.pdf cat r1 output final_page.pdf

Pdftk доступен в Linux. Многие дистрибутивы имеют бинарный файл, который вы можете установить. Вы должны убедиться, что это версия 1.45 или более поздняя. Если нет, вы можете собрать pdftk из исходного кода.


Мне нужна именно эта вещь, потому что моя система генерации pdf на основе латекса всегда производила несколько пустых страниц в начале и почти в конце документа, мне приходилось удалять их вручную в конце. Теперь я просто вызываю: pdftk A = pocket20.pdf cat A3-r6 r3-end output pocket_to_print.pdf, который удаляет первые две и 4-ю, 5-ю последние страницы.
Мартин Т.

1

pdfinfo предоставит вам размер фактического pdf-файла, а pdfimages даст вам индекс изображений в указанном pdf-файле. Таким образом, вы можете написать сценарий в виде

#!/bin/bash
for i in *.pdf
do
        j=$(pdfinfo "$i" |awk '/^Pages/ { print $2}')
        pdfimages -list -p -f "$j" "$i"
done

это должно возвратиться, если у определенного файла есть изображение на последней странице. Если это так, то вы можете делать любые манипуляции, которые вам нужны.


0

Вот решение, использующее pdfjam вместо pdftk:

#!/bin/sh
fname=`basename $1`
pdfjam $1 1-$((`pdfinfo $1 | grep Pages | grep -shoPe '\d+'` - ${2:-1})) -o ${fname%.*}-trimmed.pdf

Где первый аргумент - это файл для обрезки, а второй аргумент - количество страниц для обрезки (по умолчанию 1).


0

Одно линейное решение было бы использовать findвместе с pdftk:

find . -name "*.pdf" -exec pdftk {} cat 1-r2 output cut/{} \;

ПРИМЕЧАНИЕ : обрезанные файлы хранятся в этом примере в подкаталоге, cutкоторый pdftkвызывается для сохранения исходного имени файла, поскольку не позволяет перезаписывать входные файлы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.