11

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

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

Есть идеи?

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

5 ответов5

11

Чтобы еще больше улучшить ответ @ eldering, версия 1.45 и более поздние версии pdftk имеют возможность ссылаться на страницы в обратном порядке, добавляя строчную букву 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 из исходного кода.

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

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

1

Как уже заметил @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 .

0

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

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

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

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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .