Обрезка PDF с использованием Ghostscript 9.01

Я не программист, но хотел бы научиться обрезать PDF с помощью Ghostscript.

Я установил Ghostscript 9.01 на мою машину.

Пожалуйста, проведите меня пошаговым процессом (начиная с вызова Ghostscript), чтобы обрезать PDF с определенными координатами.

Я даже новичок в Ghostscript.

3 ответа

Во-первых, обратите внимание, что единица измерения для PDF такая же, как и для PostScript: она называется точкой [pt].

72 points == 1 inch == 25.4 millimeters

Предполагая, что у вас есть размер страницы А4. Тогда размеры носителя:

595 points width  == 210 millimeters
842 points height == 297 millimeters

Предполагая, что вы хотите обрезать:

   left edge: 24 points == 1/3 inch ~=  8.5 millimeters
  right edge: 36 points == 1/2 inch ~= 12.7 millimeters
    top edge: 48 points == 2/3 inch ~= 17.0 millimeters
 bottom edge: 72 points ==   1 inch ~= 25.4 millimeters

Тогда ваша командная строка Ghostscript выглядит так (в Windows):

gswin32c.exe                     ^
  -o cropped.pdf                 ^
  -sDEVICE=pdfwrite              ^
  -c "[/CropBox [24 72 559 794]" ^
  -c " /PAGES pdfmark"           ^
  -f uncropped-input.pdf

Или в Linux:

gs                               \
  -o cropped.pdf                 \
  -sDEVICE=pdfwrite              \
  -c "[/CropBox [24 72 559 794]" \
  -c " /PAGES pdfmark"           \
  -f uncropped-input.pdf

Однако это может работать не надежно для всех типов PDF-файлов [1]. В этих случаях вы должны попробовать эти команды:

gswin32c.exe                 ^
  -o cropped.pdf             ^
  -sDEVICE=pdfwrite          ^
  -dDEVICEWIDTHPOINTS=595    ^
  -dDEVICEHEIGHTPOINTS=842   ^
  -dFIXEDMEDIA               ^
  -c "24 72 translate"       ^
  -c " 0 0 535 722 rectclip" ^
  -f uncropped-input.pdf

или же

gs                           \
  -o cropped.pdf             \
  -sDEVICE=pdfwrite          \
  -dDEVICEWIDTHPOINTS=595    \
  -dDEVICEHEIGHTPOINTS=842   \
  -dFIXEDMEDIA               \
  -c "24 72 translate"       \
  -c " 0 0 535 722 rectclip" \
  -f uncropped-input.pdf

[^]: Если быть более конкретным, он не будет работать для PDF-файлов, которые идут вместе с их собственными /CropBox уже определены для конкретных значений. Грязный хак вокруг, чтобы изменить строку /CropBox для всех страниц, где желательно /cROPBoX (или аналогичное изменение регистра) с помощью текстового редактора до запуска вышеуказанной команды GS. Изменение регистра эффективно "снимает" настройку кропбокса (без изменения каких-либо смещений объектов PDF, делающих недействительными существующие xref таблица), поэтому он больше не рассматривается рендерами PDF.

Я начал с получения размеров моего файла с помощью

      gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox myFile.pdf

Что выводит что-то подобное для каждой страницы PDF-файла

      %%BoundingBox: 16 14 585 781
%%HiResBoundingBox: 16.991999 14.904000 584.207068 780.500015

Затем, основываясь на этих значениях, я запустил вторую команду, чтобы обрезать все страницы.

      gs -o cropped.pdf -sDEVICE=pdfwrite -dDEVICEWIDTHPOINTS=430 -dDEVICEHEIGHTPOINTS=781 -dFIXEDMEDIA -f myFile.pdf

Использование GhostScript 10.02.1

      gs --version
10.02.1

Оба предыдущих ответа просто меняют порт просмотра /CropBox файла, а не фактически обрезают содержимое PDF, позвольте мне объяснить это в картинках. Используя одну из команд из предыдущего ответа на вопрос «Обрезать», GhostScript предоставил образец «Эшера». Мы могли бы отметить, что степень «обрезки» результата здесь слева является агрессивной и «обрезает» содержимое.

Это не так, контент все еще существует, и мы можем использовать автообрезку для восстановления исходного изображения. поэтому поле «обрезка» — это съемная область просмотра в MediaBox.

Чтобы физически «обрезать» PDF-файл (аналогично редактированию всех 4 сторон), нам нужно использовать такую ​​функцию, как команда «обрезать» MuPDF mutool.

Другие вопросы по тегам