如何在将XPS转换为PDF时获取GhostPDL进度通知?

时间:2011-06-18 12:46:52

标签: c# pdf ghostscript xps

截至目前,我正在使用Process调用GhostPDL将我的XPS文件转换为PDF文件。

问题在于,有时这些转换需要一段时间。目前我正在使用通知让用户等待。但是我希望有某种进度条。我读到我可以使用StandardError,但我甚至不知道如何从命令行生成GhostPDL输出进度状态。我已经尝试搜索手册,看看是否有争议,但我没有运气。

有没有办法打开状态输出,甚至是这样,将XPS转换为PDF的替代方法?我对任何想法持开放态度。

1 个答案:

答案 0 :(得分:1)

在运行Ubuntu Natty的Lenovo T500笔记本电脑上,使用GhostPDL 9.02,使用2 GByte RAM,将Microsoft提供的38页XPS(ExchangeServer2007_ AdminComp_ chapter_02.xps)转换为完美的PDF文档需要2.3秒:

 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(可以将XPS转换为PDF的GhostPDL命令目前没有提供任何标准方法使其在stdout上更加健谈 - 甚至-dDEBUG都不起作用)..


更新:我不会熟悉与任何其他可以直接将XPS转换为PDF的工具,但我知道有一堆他们。如果您查阅Google搜索结果,您可能会更幸运。

当然,您始终可以打印 XPS到“PDF打印机”。在命令行上有不同的方法可以为您提供一些进度反馈。

如果您事先知道要转换多少页面,GhostPDL的一个(糟糕的)解决方法可能是使用像-dFirstPage=1 -dLastPage=10这样的结构来转换文件。并告知用户正在处理目前正在处理的NNN 的1-10页。

更新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开发人员Tor Anderson,他在Freenode的 #ghostscript IRC频道给了我决定性的暗示。