2014-12-23 1 views
2

Мне нужно обрезать pdf-файл в его ограничительную коробку. Сначала я вычислить фактический габаритный Box:Как обрезать PDF с помощью Ghostscript (без ввода вручную ограничивающего блока)

gswin64c.exe^
    -o nul^
    -sDEVICE=bbox^
    input.pdf 

результат

%% HiResBoundingBox: 156,350019 391,521011 445,919963 446,259010

я заменяю в

gswin64c.exe^
    -o output.pdf^
    -sDEVICE=pdfwrite^
    -dUseCropBox=true^
    -c "[/CropBox [156.350019 391.521011 445.919963 446.259010] /PAGES pdfmark"^
    -f input.pdf 

есть способ заменить Bounding Box автоматически?

спасибо.

ответ

2

Что вам нужно - Замена команд. Пожалуйста, обратитесь к справке 'for /?' Команда

Для простоты я отделенной ответ на два файла

Первый файл (getbb.bat) получить ограничивающего параллелепипеда

@echo off 
"C:\Program Files\gs\gs9.02\bin\gswin64c.exe"^ 
    -o nul -sDEVICE=bbox %1 2>&1 | find "ResBoundingBox" 

Второй файл (replacebb.bat)

@echo off 

for /f "tokens=2 delims=:" %%b in ('getbb.bat %1') do (
call :Trim bbox %%b 
"C:\Program Files\gs\gs9.02\bin\gswin64c.exe"^
    -o output.pdf -sDEVICE=pdfwrite -dUseCropBox=true^
    -c "[/CropBox [%bbox%] /PAGES pdfmark" -f input.pdf 
) 
exit /b 

:Trim 
SetLocal EnableDelayedExpansion 
set Params=%* 
for /f "tokens=1*" %%a in ("!Params!") do EndLocal & set %1=%%b 
exit /b 
+0

Здравствуйте, Благодарим за внимание! К сожалению, это не сработает :) Конечно, я изменил 'gs9.02' на мою версию 'gs9.14'. Кроме того, я полагаю, что getbb.bat содержит ошибку: вместо этого «ResBoundingBox» следует поставить либо «BoundingBox», либо «HiResBoundingBox». Я прав? – Andriy

+0

Не надо ли помечать знак «^» в конце строки -o output.pdf -sDEVICE = pdfwrite -dUseCropBox = true в файле replacebb.bat? – Andriy

+0

1. Что бы мы ни находили «ResBoundingBox» или «HiResBoundingBox», мы получаем одну и ту же строку из вывода. 2. Да, конечно, пропущен – kakabomba

0

По существу, нет. Вам нужно извлечь информацию из вывода устройства bbox и отправить ее отдельно на устройство pdfwrite.

Лучше всего написать сценарий, чтобы сделать это.

1

Это сработало для меня в пакетном файле DOS и с помощью перетаскивания:

"c:\Program Files\gs\gs9.21\bin\gswin64c.exe"^
-dBATCH -dNOPAUSE -q -sDEVICE=bbox %1 2> CropBox.txt 

for /f "tokens=2 delims=:" %%G IN (CropBox.txt) DO Set MyVar= %%G 

"c:\Program Files\gs\gs9.21\bin\gswin64c.exe" -dNOPAUSE -dBATCH^ 
-sDEVICE=pdfwrite^
-sOutputFile=%1.pdf^
-c "[/CropBox [%MyVar%] /PAGES pdfmark" -f %1 
Смежные вопросы