Обрезка 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.