Как получить уведомления о прогрессе GhostPDL при конвертации XPS в PDF? - PullRequest
4 голосов
/ 18 июня 2011

На данный момент я использую Process для вызова GhostPDL для преобразования моих файлов XPS в файлы PDF.

Проблема в том, что иногда эти преобразования занимают время. В настоящее время я использую уведомление, чтобы позволить пользователю ждать. Но я хотел бы иметь какой-то индикатор выполнения. Я прочитал, что могу использовать StandardError для этого, но я даже не знаю, как сделать так, чтобы GhostPDL выводил статус прогресса из командной строки. Я попытался найти руководство, чтобы посмотреть, есть ли аргумент для включения, но мне не повезло.

Есть ли способ включить вывод состояния или даже альтернативные способы преобразования XPS в PDF? Я открыт для любых идей.

1 Ответ

1 голос
/ 18 июня 2011

На моем ноутбуке Lenovo T500, работающем под управлением Ubuntu Natty, с 2 ГБ ОЗУ, с использованием GhostPDL 9.02, потребовалось 2,3 секунды, чтобы преобразовать предоставленный Microsoft 38-страничный XPS ( ExchangeServer2007_ AdminComp_ chapter_02.xps ) в идеальный PDF документ:

 time gxps \
   -dDEBUG \
   -o ExchangeServer2007_AdminComp_chapter_02.xps.gxps.pdf \
   -sDEVICE=pdfwrite \
    ExchangeServer2007_AdminComp_chapter_02.xps

 real   0m2.213s
 user   0m1.852s
 sys    0m0.200s

Тем не менее, я думаю gxps (команда GhostPDL, которая может конвертировать XPS в PDF в настоящее время, не предоставляет каких-либо стандартных средств, чтобы сделать его более разговорчивым на stdout - даже -dDEBUG не работает) ...


Обновление: Я не знаком с любым другим инструментом, который может конвертировать XPS в PDF напрямую, но я знаю , есть куча из них. Возможно, вам повезет больше, если вы обратитесь к результатам поиска Google.

Конечно, вы всегда можете распечатать XPS на «PDF Printer». Есть несколько способов сделать это в командной строке, что может дать вам некоторую информацию о прогрессе.

Если вы заранее знаете, сколько страниц вам нужно конвертировать, (дрянной) обходной путь с GhostPDL может заключаться в том, чтобы преобразовать файл кусками, используя такую ​​конструкцию, как -dFirstPage=1 -dLastPage=10, и сообщить пользователю, что в настоящее время страницы 1-10 из NNN обрабатываются.

Обновление 2: Вот способ получить отзыв о stdout при обработке каждой страницы:

 time gxps \
   '-Z|' \
   -o ExchangeServer2007_AdminComp_chapter_02.xps.gxps.pdf \
   -sDEVICE=pdfwrite \
    ExchangeServer2007_AdminComp_chapter_02.xps

Обратите внимание на одинарные кавычки ' вокруг -Z|. Второй символ - это знак Pipe , а не заглавная i ... Результат:

 start part /FixedDocumentSequence.fdseq
 fixdoc /Documents/1/FixedDocument.fdoc
 page /Documents/1/Pages/1.fpage w=0 h=0
 page /Documents/1/Pages/2.fpage w=0 h=0
 page /Documents/1/Pages/3.fpage w=0 h=0
 [....]
 page /Documents/1/Pages/37.fpage w=0 h=0
 page /Documents/1/Pages/38.fpage w=0 h=0

Спасибо разработчику Ghostscript Тору Андерсону, который дал мне решающий совет в IRC-канале # ghostscript на Freenode.

...