Мне нужно обрезать определенный раздел в моем PDF-файле в PNG (это будет автоматизировано с использованием Ghostscript с PHP). Это то, что я делаю сейчас, что в основном превращает первую страницу PDF в PNG:
gs -q -dNOPAUSE -dBATCH \ -sDEVICE=pngalpha -dEPSCrop \ -sOutputFile=output.png input.pdf
В частности, я пытаюсь обрезать эту верхнюю левую карту в PNG. Я также открыт для большего количества предложений о том, как это сделать.
Первый,
определить ограничительную рамку вашей первой страницы PDF:
gs \ -q \ -dBATCH \ -dNOPAUSE \ -sDEVICE=bbox \ -dLastPage=1 \ stackoverflowQuestion.pdf \ 2>&1 \ | grep %%BoundingBox
Результирующий результат будет:
%%BoundingBox: 119 531 464 814
Это значит:
(119,531)
(464,814)
Значения находятся в точках PostScript (где 72 pt == 1 inch
). Ограничивающая рамка – это прямоугольник, который включает в себя эти графические объекты PDF, которые оставляют чернила или тонерные метки на странице.
Затем,
создайте свой PNG.
Вывод из значения ограничивающей рамки, вам кажется, что он имеет ширину 345 pt ( = 464 - 119
) и 283 pt high ( = 814 - 531
). Это приводит к размеру страниц -g345x283
(задается в пикселях, поскольку Ghostscript использует по умолчанию 72 dpi для вывода изображения (если не указано иное), а для этого 72 px == 1 inch
.
Или лучше, мы сохраняем зону безопасности на расстоянии 1 п. От ограничительной рамки, поэтому мы делаем изображение немного больше, чем минимальный минимум, и мы получаем это измерение изображения: -g347x285
.
Вам также необходимо отрезать 119 пт от левого края (118 пт для «безопасности») и 531 пт от нижнего края (530 для обеспечения безопасности).
Следовательно, команда будет:
gs \ -o out.png \ -sDEVICE=pngalpha \ -g347x285 \ -dLastPage=1 \ -c "<</Install {-118 -530 translate}>> setpagedevice" \ -f stackoverflowQuestion.pdf
Вот результат PNG:
Для лучшего качества PNG увеличьте разрешение по умолчанию от 72 dpi до 720 dpi и используйте эту команду:
gs \ -o out720dpi.png \ -sDEVICE=pngalpha \ -r720 \ -g3470x2850 \ -dLastPage=1 \ -c "<</Install {-118 -530 translate}>> setpagedevice" \ -f stackoverflowQuestion.pdf
Обновить:
В Windows в окне CMD имена консольных приложений для Ghostscript – gswin32c.exe
и / или gswin64c.exe
(вместо gs
). Кроме того, вы должны использовать ^
как символ продолжения строки (вместо \
).
В Windows имена консольных приложений для Ghostscript – gswin32c.exe
и / или gswin64c.exe
(вместо gs
).
В окне CMD вы должны использовать ^
как символ продолжения строки (вместо \
). Кроме того, grep
может быть недоступен – вместо этого используйте findstr
. Наконец, если gswinXX.exe
не находится в вашем %PATH%
, и если полный путь содержит пробел, вы должны его процитировать:
"c:\program files\ghostscript\gswin64c.exe" ^ -q ^ -dBATCH ^ -dNOPAUSE ^ -sDEVICE=bbox ^ -dLastPage=1 ^ stackoverflowQuestion.pdf ^ | findstr %%BoundingBox
В окне PowerShell просто не указывается полный путь к исполняемому файлу. Вам нужно запустить:
& "c:\program files\ghostscript\gswin64c.exe" -q -o nul: -sDEVICE=bbox my.pdf