3

Я пытаюсь сделать следующее с ghostscript:

Превратите один многостраничный файл PDF (около 3000 страниц, файл 200 МБ) в:

Один файл на страницу PDF и конвертируйте каждый (страницу / файл) в EPS или PS (постскриптум (предпочтительно)).

Пример:

hello.pdf (10 pages)

будет производить:

hello1.ps (page 1 out of 10)
hello2.ps
hello3.ps
...
hello10.ps

Как я могу это сделать? Я пытался в течение 4 дней, и не могу понять это.

У меня есть скрипт, который я пробовал (не будет работать):

Note: Windows(7) user here.

gs -sDEVICE=epswrite -o documentname-%.eps documentname.pdf

Я также не знаю, как перейти к каталогу, где находится мой файл (не могу понять это тоже). Если вы можете, пожалуйста, покажите мне, как.

Большое спасибо.

2 ответа2

5

Команда frabjous 'работает, но делает вещи более сложными, чем они должны быть для такой простой задачи, как эта.

Он запускает отдельную команду Ghostscript для каждой отдельной страницы PDF один раз, выбирая только нужную страницу PDF с помощью параметров -dFirstPage=... -dLastPage=... (У его версии для Windows также есть небольшая опечатка: она должна быть for /L %G in... - вместо for \L %G in...)

Это также излишне медленно, потому что он запускает 3002 команды для PDF-файла на 3002 страницы.

Вы можете добиться того же самого, не пройдя 3002 прохода за один проход команды Ghostscript. В Windows:

 gswin32c.exe ^
   -o hello%04d.eps ^
   -sDEVICE=epswrite ^
    hello.pdf

В Linux или Mac OS X:

 gs \
   -o hello%04d.eps \
   -sDEVICE=epswrite \
    hello.pdf

Часть %04d в выходном имени создаст 4-значную нумерацию (страницу) для выходных файлов EPS, заполнив неиспользуемые цифры начальными нулями (что не является тем, что использовался в желаемом примере вывода).

5

Во-первых, я использую Linux, а не Windows, поэтому я не могу это проверить, но я думаю, что-то вроде этого является правильным. (Я почти испытываю желание сказать вам, чтобы установить Linux внутри виртуальной машины для этого, так как подобные вещи намного проще с взрослой операционной системой, но в любом случае, вот мой лучший выбор для использования Windows.)

Сначала откройте командную /Dos строку.

Чтобы перейти к папке, в которой находятся ваши файлы, используйте команду CD, после чего укажите полный путь к файлам в кавычках. Например, если они находятся в папке «C:\Users\Somebody\Documents and Settings\ Мои документы \ PDFs \», введите:

cd "C:\Users\Somebody\Documents and Settings\My Documents\PDFs\"

Я думаю, что альтернативой было бы просто создать пакетный файл в том же каталоге, что и PDF, и запустить пакетный файл оттуда.

Хорошо, теперь я думаю, что вам придется использовать полный путь к исполняемому файлу Ghostscript, который вы должны найти для себя. Я предполагаю, что это «C:\Program Files (x86)\gs\gs9.00\bin\gswin32c.exe», но вам нужно будет дважды проверить это на своем компьютере. Если вы используете другую версию ghostscript или 32-разрядную версию Windows 7, она будет где-то еще. Также убедитесь, что вы используете gswin32c.exe, а не gswin32.exe, который отличается.

Теперь выясните, сколько именно страниц в этом PDF. Я бы знал, как это сделать с помощью команды в Linux, но я не имею понятия в Windows. Я собираюсь предположить, что это 3002.

Теперь введите эту команду в командной строке (все в одной строке):

FOR \L %G IN (1,1,3002) DO "C:\Program Files (x86)\gs\gs9.00\bin\gswin32c.exe" -dBATCH -dSAFER -dNOPAUSE -dFirstPage=%G -dLastPage=%G -sDEVICE=pswrite -o hello%G.ps hello.pdf

Это мое лучшее предположение. Но, надеюсь, тот, кто на самом деле использует Windows, может подтвердить, что это работает.

Вместо epsfiles измените -sDEVICE#pswrite на -sDEVICE=epswrite и измените hello%G.ps на hello%G.eps .

Если вместо этого вы используете пакетный файл, везде используйте %% G вместо% G, замените = на #.

Если «hello.pdf» изменяется на что-то с пробелами, используйте кавычки «hello world.pdf». То же самое для "привет% G.ps".


В GNU/Linux (или Mac OS X) соответствующей командой будет:

for G in {1..3002} ; do gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=$G -dLastPage=$G -sDEVICE=pswrite -o "hello$G.ps" "hello.pdf" ; done

чтобы он автоматически вычислял количество выполняемых страниц, если у вас установлены seq и установлены утилиты poppler (которые, по-моему, поставляются по умолчанию в Ubuntu), вы можете использовать:

for G in $(seq 1 $(pdfinfo academicregs.pdf | sed -n 's/Pages:[^0-9]*\([0-9]*\).*/\1/p')) ; do gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=$G -dLastPage=$G -sDEVICE=pswrite -o "hello$G.ps" "hello.pdf" ; done

Те, которые я проверял, и они работают.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .