【问题标题】:Ghostscript (MinGW compile) issue with pipes管道的 Ghostscript(MinGW 编译)问题
【发布时间】:2013-01-24 03:49:01
【问题描述】:

解决方案在最后一条评论中,但以防万一有人在寻找解决方法,我在这里总结了它:http://sourceforge.net/mailarchive/message.php?msg_id=30391589


我设法使用 MinGW 和当前稳定的 GhostScript (9.06) 构建了GSDjVu。将 Bash 脚本转换为 CMD 的任务并不难,但令我惊讶的是 gsdjvu(带有 gsdjvu 驱动程序的 gs 解释器)没有按预期接受 PDF 输入。它只接受 PostScript。为了避免编写巨大的临时文件,我想创建一个管道,这里是示例:

set args=-sstdout=nul -dSAFER -dNOPAUSE -dBATCH

gs %args% -sDEVICE=pswrite -sOutputFile=- test.pdf |^
   gsdjvu %args% -sDEVICE=djvusep -sOutputFile=- - |^
   csepdjvu - test.djvu

这会导致错误:

*** csepdjvu: corrupted input file (lost RLE sync.)
*** (..\..\..\tools\csepdjvu.cpp:647)

Internal error at ./base/gdevdjvu.c:2831

 
如果我将gsdjvu 的结果输出到文件而不是管道,则没有错误:

gs %args% -sDEVICE=pswrite -sOutputFile=- test.pdf |^
   gsdjvu %args% -sDEVICE=djvusep -sOutputFile=test.sep -

csepdjvu test.sep test.djvu

 
现在,如果我比较来自gsdjvu (test.sep) 的文件输出和来自相同 (test2.sep) 的管道输出:

gs %args% -sDEVICE=pswrite -sOutputFile=- test.pdf |^
   gsdjvu %args% -sDEVICE=djvusep -sOutputFile=- - > test2.sep

我得到了这个差异:

经过简单分析,0A 在管道输出中表示为0D0A,或者“行尾”从 Unix LF 更改为 Windows CRLF。

为什么会这样,有办法补救吗?
或者它可能是一个错误?

【问题讨论】:

    标签: mingw pipe ghostscript djvu


    【解决方案1】:

    我不确定 DjVuLibre 如何无法接受 PDF 作为输入,因为据我所知它是一个 Ghostscript 设备。你有一些文件说这不能做吗?如果是这样,我会向维护者投诉,我看不出有任何原因。

    由于这适用于文件输出,因此合乎逻辑的答案是正在进行一些换行符转换。

    一些快速的谷歌搜索显示有很多关于此的讨论,但我看不到任何与您的体验完全匹配的内容。您可能应该将此标记为 MingW,或者更明智地将其带到 MingW 支持论坛。

    或者只是停止对 I/O 进行管道传输。

    【讨论】:

    • 肯,感谢您的意见。停止管道是不可接受的,因为 PostScript 和分离文件都会多次增加输入文件的大小,并且如果可以避免的话,使用临时文件会更慢(并且蹩脚)。 OTOH,GSDjVu 应该能够接受 PDF(gsdjvu -h 报告 PDF 支持),而且我过去已经在 Ubuntu 上尝试过,效果很好 - djvudigital bash 脚本包装器通过管道将分离文件传输到 csepdjvu 并且它有效如前所述。但在当前问题中,gsdjvu 使用 LF 字符写入文件,但使用 CRLF 管道。
    • MinGW 周围肯定有一些东西。只有最新版本的 GhostScript 可以在其上编译,无需通过反复试验寻找补丁。我不确定哪个 GS 版本引入了 MinGW 的可能性,我也没有尝试编译干净的 GS,因为它已经以二进制格式提供,但也许我应该尝试看看它是否会接受 PDF 输入。至于管道我不知道在哪里报告这个问题 - 你建议我写到 MinGW 列表而不是 GS 或 DjVuLibre 列表?
    • 好吧,这似乎不是 GS 问题,也不是 DjVuLibre 问题(我可能在这里错了),但谷歌搜索发现我有很多抱怨 stdin 不是二进制模式,因此会进行 CR/LF 转换。对我来说,这似乎更像是 MingW 的问题。我们不特别支持在 MingW(或 Cygwin)上编译,所以如果你想这样做,你就得靠你自己了。虽然我们最近加入了一些应该编译的补丁,但它基本上不是我们支持的平台。
    • 好的,谢谢。我将重点搜索您建议的点(mingw stdin),然后可能会联系他们的列表,并在此处报告结果。
    • 最后,在@KenS 和其他人的进一步帮助下,这是可能的秘诀:sourceforge.net/mailarchive/message.php?msg_id=30391589
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多