解決策は最後のコメントにありますが、誰かが回避策を探している場合に備えて、ここにまとめました: 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 に変更されていることが明らかになりました。
これはなぜでしょうか。また、それを改善する方法はありますか?
それともバグですか?