2011-01-28 6 views
16

Я использую API библиотеки Ghostscript (обертывание из C#) для печати документов PDF из своего приложения.
С '-dFirstPage' и '-dLastPage' Параметры Я могу выбрать диапазон страниц для печати, но как насчет общего количества страниц PDF?Ghostscript: PDF всего страниц

Не очень приятно разрешить пользователю выбирать интервал страницы от 2 до 10, если, скажем так, документ PDF имеет только 4 страницы.

Учтите, что я использую библиотеку Ghostscript через вызов библиотеки библиотеки gsapi_init_with_args.

+1

PDFs ДОЛЖНЫ объявить свое количество страниц в своем каталоге метаданных. Вы могли бы побежать с. например, * gs -q -c "(in.pdf) (r) файл runpdfbegin pdfpagecount = quit" *, чтобы сделать Ghostscript подсчет страниц. –

+0

@pipitas Здравствуйте и спасибо за помощь; если я понимаю, я должен использовать «(in.pdf) (r) файл runpdfbegin pdfpagecount = quit» в качестве входного параметра вызова GS? Если да, «in.pdf» будет входным файлом, но как насчет «(r)»? Еще раз спасибо. – lorenzoff

+0

Просто используйте '(r)' как есть. Это внутренний макрос Ghostscript, говорящий Ghostscript для чтения/запуска файла '(in.pdf) ... Да, единственная переменная - 'in.pdf' - замените ее на [path +] filename вашего PDF. –

ответ

31

Ghostscript может подсчитывать и отображать количество страниц в PDF на stdout. Командная строка является

gswin32c^
    -q^
    -dNODISPLAY^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount = quit" 

Здесь все -c "..." материала представляет собой фрагмент командной строки PostScript (используя несколько GS внутренних расширений команд). И input.pdf - это имя файла PDF (также может быть полный путь, например, (c:/path/to/my.pdf)).

Однако лучше и быстрее инструмент для это вида работы будет использовать pdfinfo (часть Xpdf-коммунальные услуги, также доступна на Windows).


Update:

@ebyrob хочет знать, если один может изменить мой пример командной строки, так что он также отображает ФПВ в одной операции. Попробуйте это:

gswin32c^
    -q^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount ="^
    -f input.pdf 

Ну, это не единственная операция - это просто две разные операции в одной командной строке.

+0

Еще раз спасибо – lorenzoff

+0

Может ли это быть изменено, чтобы читать метаданные, одновременно отображая изображение в формате PDF за одну операцию? (Скажите с '-sDEVICE = display' и указанными друзьями) А также, когда вы читаете файл с' stdin'? (то есть: gswin32 имя_файла '-') Запуск просто:' -c "pdfpagecount", казалось, дал мне ошибку «операция не существует». Включение 'runpdfbegin' игры мне недействительным именем файла. –

+0

@ebyrob: вам нужен каждый символ в моем примере команды (вы можете изменить только «* input.pdf *» на другое существующее имя файла или -path. Вы не можете просто пропустить любую часть, как вам кажется ... –

0

Я попытался сделать этот скрипт:

gswin32c^
    -q^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount ="^
    -f input.pdf 

работа в C# завернуты решение и продолжал получать ошибки "/ undefinedfilename". В этом случае убедитесь, что ваш путь к файлу имеет слэши «/» как «DirectorySeperator», а не «Backsclas» «\». Я знаю, что Курт Пфайфл уже написал это, но это случилось со мной, я просто забыл об этом.

+0

Если вы хотите использовать обратную косую черту, вы должны использовать два из них каждый раз ... –

Смежные вопросы