Инструмент командной строки для обрезки файлов PDF

101

Я ищу инструмент командной строки с открытым исходным кодом, чтобы обрезать PDF-файл, как мы можем сделать в Adobe Acrobat Pro. Я пробовал PdfTk, ImageMagick, PyPDF и GhostScript - пока безуспешно.

Ракеш
источник
Не могли бы вы описать, какие обрезки вы можете сделать с помощью Adobe Acrobat pro? Потому что у меня его нет и поэтому не могу сказать, что вы ищете.
xubuntix
В Adobe Acrobat Pro мы можем использовать элементы управления полями для обрезки PDF. мы можем предоставить значения сверху, снизу, справа и слева для обрезки
Ракеш

Ответы:

124

Я бы посоветовал вам взглянуть на PDFcrop .

Если вы хотите обрезать PDF с левым, верхним, правым и нижним полями 5, 10, 20 и 30 пунктов (точек), то выполните

pdfcrop --margins '5 10 20 30' input.pdf output.pdf

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

pdfcrop --margins '-50 -50 -50 -50' input.pdf output.pdf

зерновые культуры по 50 баллов слева, сверху, справа, снизу (в этом порядке).

Если вы запустите только команду pdfcrop input, она выведет файл с именем input-crop.pdf с нулевыми полями. Я считаю это очень удобным при включении PDF-иллюстраций в документы.

Обрезка нескольких файлов

К сожалению, pdfcrop не может обрезать несколько файлов одновременно. Однако легко написать скрипт, который будет обрезать все PDF-файлы в папке, в которой находится скрипт.

Создайте новый пустой файл и назовите его something.sh. Откройте его в текстовом редакторе и вставьте следующее:

#!/bin/bash
for FILE in ./*.pdf; do
  pdfcrop "${FILE}"
done

Сохраните его и закройте. Затем щелкните файл правой кнопкой мыши, выберите « Свойства»> «Разрешения» и установите флажок « Разрешить выполнение файла как программы» . Теперь закройте диалог. Запустите скрипт, дважды щелкнув по нему и выбрав « Запуск в терминале» . И новая обрезанная версия с нулевым полем всех PDF-файлов с суффиксом -crop теперь будет напечатана в папке. Если вам нужны поля или другие вещи, вы, конечно, можете просто открыть скрипт и добавить аргументы после него pdfcrop.

Расмус
источник
Обратите внимание, что вместо указания отрицательных полей можно также использовать --bbox "<left> <bottom> <right> <top>". Это позволяет использовать подход для определения посевной площади, описанный в моем ответе ниже .
bluenote10
Есть ли возможность сообщить номер страницы (который нужно обрезать)?
LK
Боюсь, это все или ничего. pdfcrop --helpперечисляет доступные варианты. Я не вижу там ничего, что позволило бы указать диапазон страниц.
Расмус
7
Сравнивая размер вывода PDFCrop с его вводом, выглядит так, как будто pdfcrop изменяет только ограничивающие рамки. Это не удаляет данные. Таким образом, такой подход был бы неуместным, чтобы уменьшить размер PDF или скрыть информацию.
init_js
Как колдовство! даже с полями PDF необходим!
Jojo
36

Спасибо за Rasmus, вы можете установить pdfcrop из пакета texlive-extra-utils:

sudo apt-get install texlive-extra-utils

Затем обрежьте pdf файлы, используя команду pdf crop:

pdfcrop input.pdf output.pdf

использовать, --helpчтобы увидеть более удивительные параметры, такие как--margins

pdfcrop --margins 5 input.pdf output.pdf

какой урожай PDF с 5 б.п. с каждой стороны страницы

sarigalin
источник
1
Измерение bp, которое немного отличается от pt. См. Tex.stackexchange.com/questions/8260/… .
Коппор
2
Для меня pdfcrop раздувал размер файла от 300х (от 7МБ до 2ГБ). Я должен был сделать gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS="/ebook" -sOutputFile=output2.pdf output.pdfпотом, что фиксировал размер файла.
fiktor
17

Вы также можете обрезать PDF-файлы, просто используя Ghostscript. Я написал небольшой скрипт для упрощения процесса (вдохновленный этим ответом ):

#!/bin/bash

if [ $# -lt 5 ]
then
  echo "Usage: `basename $0` <pdf-file> <x_min> <x_max> <y_min> <y_max>"
  echo "Notes:"
  echo " - all coordinates are absolute; no calculation of width/height necessary"
  echo " - use 'gv' to determine the coordinates"
  exit 65
fi

file="$1"
xmin="$2"
xmax="$3"
ymin="$4"
ymax="$5"

base="${file%.*}"
outfile="${base}_cropped.pdf"

echo "writing to: $outfile"

gs \
  -o $outfile \
  -sDEVICE=pdfwrite \
  -c "[/CropBox [$xmin $ymin $xmax $ymax] /PAGES pdfmark" \
  -f $file

Чтобы определить координаты обрезки, я использую gv, который печатает координаты курсора мыши, используя те же единицы измерения, что и Ghostscript. Например, здесь я определяю минимальные координаты для х / у (значения в верхнем левом углу):

crop1

Теперь максимальные координаты:

crop2

И , наконец, я запускаю скрипт , pdf_crop_by_coordinates.sh test.pdf 45 429 38 419продуцирующий test_cropped.pdfкоторый выглядит следующим образом:

результат

Я понятия не имею, как решение Ghostscript сравнивается с pdfcropточки зрения качества и правильности.

bluenote10
источник
15

Когда я не могу что-то сделать с pdftk, следующим местом , куда я обращаюсь, является PDFjam , который представляет собой оболочку командной строки для пакета LaTeX pdfpages (следовательно, вам также нужно это и установленный дистрибутив TeX). Для получения справки о том, как его использовать, я рекомендую обычный экран справки:

pdfjam --help

поскольку страница руководства редкая, а веб-страница концентрируется на примерах.

Чтобы обрезать PDF, вам нужна следующая команда:

pdfjam --keepinfo --trim "10mm 15mm 10mm 15mm" --clip true --suffix "cropped" input.pdf

Это выведет файл с именем input-cropped.pdf. Порядок планки должны быть слева, снизу, справа, сверху, в соответствии \includegraphicsс GraphicX .

Чтобы дать представление о том, как он сравнивается с PDFcrop, у меня недавно была причина вырезать довольно модный PDF. Мой оригинал был 675 КБ, моя обрезанная версия через PDFjam была 1,2 МБ, а версия, обрезанная через PDFcrop, была 4,5 МБ. В то время как PDFjam и PDFcrop удаляли встроенные гиперссылки и закладки, PDFjam с --keepinfoопцией сохранял свойства документа (например, заголовок, автор, тема).

Алекс Болл
источник
1
Примечание: это на самом деле не удаляет содержимое, которое становится за кадром из PDF, а только скрывает его. То же самое, что комментирует @init_js в самом популярном ответе.
Ян Янковский
3

Это может помочь вам.
Это соответствует более новой версии Ubuntu и жизни. Это мастер PDF Editor . Вы можете использовать его, обрезать, добавлять некоторые вещи и т. Д.

Пример:
это до Это раньше Это после ctrl + k введите описание изображения здесь

Шамина
источник
2

Вы можете использовать скрипт pypdf с этой страницы . Но в ответе на этот вопрос об обмене стеками , похоже, есть и много вариантов.

xubuntix
источник
Я не могу получить то, что левые верхние правые нижние параметры. это точки, дюймы, сантиметры?
Ракеш
@Rakesh: Смотрите мой ответ для объяснения параметров и как их легко определить.
bluenote10
2

Программа pdfCropMargins - это приложение командной строки, которое автоматически обрезает поля PDF-файлов.

Эта программа зависит либо от программы Ghostscript, либо от программы pdftoppm, устанавливаемой (и доступной) в системе. И проанализируйте изображения страниц с помощью PIL, чтобы найти ограничивающие рамки, используя порог 191.

установить с помощью

pip install pdfCropMargins

Запустить с помощью

pdf-crop-margins -v -s -u your-file.pdf

Для помощи

pdf-crop-margins -h | Больше

CharmiChokshi
источник