截至目前,我正在使用 Process 调用 GhostPDL 将我的 XPS 文件转换为 PDF 文件。
问题是有时这些转换需要一段时间。目前我正在使用通知让用户等待。但我想要某种进度条。我读到我可以为此使用 StandardError,但我什至不知道如何从命令行使 GhostPDL 输出进度状态。我试过搜索手册,看看是否有要打开的参数,但我没有运气。
有没有办法打开状态输出,或者是否有其他方法可以将 XPS 转换为 PDF?我愿意接受任何想法。
最佳答案
在我的联想 T500 笔记本电脑上运行 Ubuntu Natty,2 GB RAM,使用 GhostPDL 9.02,将 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|
周围的单引号 '
。第二个字符是竖线,不是大写的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 channel 中给了我决定性的提示。
关于c# - 如何在将 XPS 转换为 PDF 时获取 GhostPDL 进度通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6396103/