Інструмент командного рядка для обрізання файлів 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 не може обрізати кілька файлів одночасно. Однак легко написати сценарій, який буде обрізати всі pdfs у папці, в якій знаходиться сценарій.

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

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

Збережіть і закрийте. Потім клацніть правою кнопкою миші файл, перейдіть до Властивості> Дозволи та перевірте поле Дозволити виконання файлу як програми . Тепер закрийте діалогове вікно. Запустіть сценарій, двічі клацнувши по ньому та вибравши Запустити в терміналі . І нова, обрізана з нульовим запасом версія всіх pdfs із суфіксом -кроп тепер буде надрукована у папці. Якщо вам потрібні поля або інші речі, ви, звичайно, можете просто відкрити сценарій і додати аргументи після pdfcrop.


Зауважте, що замість того, щоб вказати негативні маржі, можна також використовувати --bbox "<left> <bottom> <right> <top>". Це дозволяє використовувати підхід для визначення площі врожаю, описаного в моїй відповіді нижче .
bluenote10

Чи є можливість повідомити номер сторінки (яку потрібно обрізати)?
ЛК

Я боюся, що це все або нічого. pdfcrop --helpперелічує доступні варіанти. Я не бачу там нічого, що дозволило б вказати діапазон сторінок.
Расмус

7
Порівнюючи розмір виводу PDFCrop з його входом, схоже, що pdfcrop змінює лише обмежувальні поля. Це не видаляє дані. Таким чином, такий підхід був би непридатним зменшити pdf або приховати інформацію.
init_js

Як шарм! навіть із полями, потрібними у форматі PDF!
жоджо

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 bp з кожного боку сторінки


1
Вимірювання є bp, яке трохи відрізняється від pt. Див tex.stackexchange.com/questions/8260 / ... .
коппор

2
Для мене pdfcrop надув розмір файлу від 300x (від 7MB до 2GB). Мені довелося зробити це 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. Наприклад, тут я визначаю мінімальні координати для x / y (значення у верхньому лівому куті):

урожай1

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

урожай2

І нарешті, я запускаю сценарій, pdf_crop_by_coordinates.sh test.pdf 45 429 38 419створюючи такий, test_cropped.pdfякий виглядає так:

результат

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


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з графіком .

Щоб дати уявлення про те, як вона порівнюється з PDFcrop, нещодавно у мене з’явилася причина обрізати досить фантазійний PDF. Оригінал - 675 кБ, обрізана версія через PDFjam - 1,2 Мб, а версія, обрізана через PDFcrop, 4,5 Мб. Хоча і PDFjam, і PDFcrop знімали вбудовані гіперпосилання та закладки, PDFjam з --keepinfoможливістю збереження властивостей документа (наприклад, заголовок, автор, тема).


1
Примітка: це дійсно не видаляє вміст, який стає поза екраном з PDF, лише приховує його. Те саме, що коментує @init_js у відповіді з найкращими оцінками.
Ян Żankowski


3

Це може вам допомогти.
Це відповідає новій версії Ubuntu та life. Це головний редактор PDF . Ви можете використовувати його для обрізання, додати деякі речі тощо.

Приклад:
Це перед Це раніше цим Це після ctrl + k введіть тут опис зображення



2

Ви можете використовувати скрипт pypdf з цієї сторінки . Але у відповіді на це запитання щодо обміну статками , здається, існує також багато варіантів.


Я не в змозі отримати те, що є лівими параметрами верхнього правого нижнього. це точки, дюйми, сантиметри?
Ракеш

@ Ракеш: Дивіться мою відповідь для пояснення параметрів і як їх легко визначити.
bluenote10

2

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

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

встановити за допомогою

pip встановити pdfCropMargins

Запустити за допомогою

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

Для допомоги

pdf-crop-margins -h | більше

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.