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

标签 c# pdf ghostscript xps

截至目前,我正在使用 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/

相关文章:

C# : How to use Thread and know when exactly thread work is finished?

c# - 使用 RemoveRange 删除与内存对象匹配的项目

html - Firefox 不显示内联 pdf

python - 如何从Python解码pdf加密文件

c# - 使用 dot net 或任何其他语言在内存中进行 ghostscript 转换

android - 如何在android系统中使用ghostscript将pdf转换为pksmraw?错误代码为-15

c# - 在凸多边形内插入一组顶点

ios - 如何禁用 QLPreviewController 打印按钮

c# - 如何在 C# 中引用 Ghostscript DLL

c# - if语句多个条件和匹配多个值的区别