Пакетный режим GhostScript? - PullRequest
       5

Пакетный режим GhostScript?

1 голос
/ 15 сентября 2011

Я использую GhostScript для преобразования PDF в PNG, проблема в том, что для каждой вызываемой страницы:

gs -sDEVICE = pnggray -dBATCH -dNOPAUSE -dFirstPage = 10 -dLastPage = 10 -r600 -sOutputFile = image_10.png pdf_file.pdf

Что не хорошо, я хочу, например, передать dFirstPage = 10 dLastPage = 30 и заставить GhostScript автоматически извлекать каждую страницу в отдельном png-файле с PAGE-NUMBERв имени файла, не запуская его снова с другим sOutputFile ...

Я знаю, что это, вероятно, что-то простое, но я скучаю по нему ...

Кроме того, было бы здорово, если кто-то можетскажите мне, какой параметр мне нужно передать, чтобы ghostscript работал в полной тишине, без вывода на консоль.

РЕДАКТИРОВАТЬ: Добавление% d к выходному параметру добавляет номер запуска вместо числастраница.Например:

-dFirstPage = 10 -dLastPage = 15 -sOutputFile = image_% d.png

приводит к:

image_1.png, image_2.png, image_3.PNG и т. д. ... вместо: image_10.png, image_11.png, image_12.png ...

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

К сожалению, то, что вы хотите сделать, невозможно. Смотрите также мои ответы здесь и здесь.

Если вы хотите выполнить все преобразования PNG за один раз (без перезапуска Ghostscript для каждой новой страницы), вам необходимо учитывать тот факт, что макрос %d всегда начинается с нумерации первого выходного файла * 1005. * page as 1, но, конечно, вы получите гораздо лучшую производительность.

Если вам не нравятся эти соглашения об именах в конечном результате, у вас есть , чтобы сделать второй шаг, который переименовывает полученные файлы в их окончательное имя.

Предполагая, что ваши исходные выходные файлы называются image_1.png ... image_15.png, но вы хотите, чтобы они назывались image_25.png ... image_39.png, ваша основная команда для этого будет:

 for i in $(seq 1 15); do
     mv image_${i}.png image_$(( ${i} + 24)).png
 done

Обратите внимание, что это может пойти не так, если два диапазона чисел пересекаются, так как команда затем перезапишет один из ваших еще не переименованных входных файлов. Чтобы сохранить, не используйте mv, но используйте cp, чтобы сначала сделать копию новых файлов во временном подкаталоге:

 for i in $(seq 1 15); do
     cp -a image_${i}.png temp/image_$(( ${i} + 14)).png
 done
1 голос
/ 15 сентября 2011

Сохраните это как файл

 #!/bin/bash
 case $# in [!3] ) printf "usage : ${0##*/} stPage endPage File\n" >&2 ;; esac
 stPage=$1
 endPage=$2
 (( endPage ++ ))
 file=$3
 i=$stPage
 while (( i < endPage  )) ; do
    gs  -sstdout=/dev/null -sDEVICE=pnggray -dBATCH -dNOPAUSE -dPage=$i -r600 -sOutputFile=image_$i.png ${file}

   (( i ++ ))
 done

Проверьте в руководстве по скрипту ghost, чтобы увидеть, есть ли опция -dPage=${num}, иначе используйте -dFirstPage=${i} -dLastPage=${i}.

Затем сделайте его исполняемымchmod 755 batch_gs.sh

Наконец запустите его с аргументами

  batch_gs.sh 3 5 fileName

(слегка протестировано).

Надеюсь, это поможет.

...