0

解決策は最後のコメントにありますが、誰かが回避策を探している場合に備えて、ここにまとめました: 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

 
ここで、(test.sep) からのファイル出力gsdjvuと同じ (test2.sep) からのパイプ出力を比較すると:

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

私はこの差分を取得します:

スクリーンショット

単純な分析の後0A、パイプ出力で として表される0D0Aか、「行末」が Unix LF から Windows CRLF に変更されていることが明らかになりました。

これはなぜでしょうか。また、それを改善する方法はありますか?
それともバグですか?

4

1 に答える 1

1

私の知る限り、DjVuLibre は Ghostscript デバイスであるため、DjVuLibre が PDF を入力として受け入れることができない理由はわかりません。これを行うことができないというドキュメントはありますか? もしそうなら、私はメンテナーに文句を言いますが、これには理由が見当たりません。

これはファイル出力で機能するため、論理的な答えは、何らかの改行変換が行われているということです。

いくつかの簡単なグーグル検索により、これについて多くの議論があることが明らかになりましたが、あなたの経験と正確に一致するものは何も見つかりません. おそらく、これに MingW のタグを付けるか、より賢明に MingW サポート フォーラムに持っていく必要があります。

または、I/O のパイプを止めるだけです。

于 2013-01-22T08:27:10.440 に答える