Как установить смещение printf% d для Ghostscript? - PullRequest
0 голосов
/ 24 марта 2012

Как можно определить смещение для автоматического именования отдельных выходных файлов? Это, вероятно, применимо и к другим программам, но мне нужно, чтобы оно работало для Ghostscript прямо сейчас, и я могу предоставить пример команды для справки.

Следующая команда выводит каждую отдельную страницу файла a.pdf в виде отдельного файла .png (0.png, 1.png, 2.png и т. Д.). Я хотел бы начать с скажем, 23 .png, 24.png, 25.png и т. д ... Есть ли способ передать это через командную строку? Очевидно (% d, 23) .png не работает, но, возможно, есть другой способ сделать это?

gswin32c -q -dNOPAUSE -sDEVICE=tiffg4 -sOutputFile=%d.png a.pdf -c quit

Спасибо!

EDIT: Похоже, -dFirstPage делает что-то похожее для смещения начальной страницы многостраничного ввода, но я не могу найти ничего подобного для вывода.

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Я оставлю этот вопрос открытым для тех, кто может захотеть поделиться с лучшей идеей, однако это то, что я закончил в Python. (Этот метод, вероятно, может быть применен к любому языку, который имеет доступ к командной строке)

Вывод начинается с 23.png и повторяется до a.pdf EOF

import os
from pyPdf import PdfFileReader

offset = 22
totalpages = PdfFileReader.getNumPages()

start = 1

while start <= totalpages:
    os.command('gswin32c -q \
                         -dNOPAUSE \
                         -dFirstPage=start \
                         -dLastPage=start \
                         -sDEVICE=tiffg4 \
                         -sOutputFile='+str(start+offset)+'.png \ 
                          a.pdf \
                         -c \
                          quit')
    start = start+1

1 Ответ

0 голосов
/ 02 апреля 2012

(Кстати, вы не можете использовать -o %03d.png для запуска выходного файла с 000.png - он будет начинаться с 001.png в качестве первой страницы .... Кроме того, ваш -sDEVICE=tiffg4 будет выводить файлы TIFF G4,не PNG-файлы, независимо от того, какой суффикс вы используете для выходного файла ....)

Я могу думать только об уродливом обходном пути для достижения того, чего вы хотите.Поскольку Ghostscript может обрабатывать различные входные файлы и источники командной строки в одной и той же командной строке, но по-прежнему записывать вывод за один раз, вы можете предварительно обработать 22-страничный файл, прежде чем тот, который вас интересует:1009 * Теперь просто удалите первые 22 файла TIFF, и первая страница вашего реального PDF-файла будет иметь вид 023.tiff.

Альтернативный метод - сделать это следующим образом:

 gs \
   -o %03.tiff \
   -sDEVICE=tiffg4 \
   -c "showpage showpage showpage showpage" \
   -c "showpage showpage showpage showpage" \
   -c "showpage showpage showpage showpage" \
   -c "showpage showpage showpage showpage" \
   -c "showpage showpage" \
   -f the-real-pdf.pdf

Видите команды 22 * ​​1016 *?Это заставляет Ghostscript обрабатывать 22 пустых страницы ввода PostScript до того, как файл -f the-real-pdf.pdf получит свою очередь.Или еще лучше:

 gs \
   -o %03.tiff \
   -sDEVICE=tiffg4 \
   -c "$(for i in $(seq 1 22); do echo showpage; done)" \
   -f the-real-pdf

Чтобы создать файлы PNG для TIFF, просто используйте -sDEVICE=pngalpha (или pngmono, png256 или pnggray) ...

...