2

アプリケーションの一部として PDF から画像を生成するために使用Ghostscript 9.05しています (Java のプロセスとして実行)。

最近、Linux ボックスでいくつかの PDF から画像への変換が次のエラーで失敗するという問題に遭遇しました。

**** This file had errors that were repaired or ignored.
**** The file was produced by:
**** >>>> Acrobat Distiller 8.3.1 (Macintosh) <<<<
**** Please notify the author of the software that produced this
**** file that it does not conform to Adobe's published PDF 
**** specification.

各ページで次のようなエラーがスローされます。

**** Warning: File has insufficient data for an image.
%%BoundingBox: 77 36 797 1082
%%HiResBoundingBox: 77.760003 36.720001 796.320030 1081.440041
Page 141
warning: ignoring invalid option raw
error: cannot decode code stream
unable to decode JPX image data.

ただし、同じ変換を Win7 マシンでローカルに実行すると、エラーは発生しません。

短くて狭いのは「PDFを返送して、動作するPDFを送ってもらう」ことであることは知っていますが、なぜこれがLinuxボックスで失敗するのにエラーなしで成功するのか(そしてエラーのない画像を生成するのか)について興味をそそられます) Windows マシンで?

何か案は?

Linux と WINdows のバージョンには大きな違いがある可能性があるため、現時点でバグ レポートを開くのは気が進まないのですが、私はそのことを知りません。

アップデート

LinuxボックスでGhostscriptがどのように構築されているかを調べた後(Ubuntu 12.04 64ビット長期サポートリリースを実行しています)、次の情報を収集しました。

jpeg2000 操作のために、Ghostscript は JasPer JPEG-2000 ランタイム ライブラリ バージョン 1.900.1-13 (JPEG-2000 Part-1 の ISO 参照実装) を使用しています。

JasPer は libjpeg-turbo8 ライブラリを使用して構築されています。

ジャスパーのサイトによると

JasPer ソフトウェアは、JPEG-2000 Part-1 コーデックの公式リファレンス実装として、JPEG-2000 Part-5 標準 (つまり、ISO/IEC 15444-5) に含まれています。

Ghostscript は、JasPer を使用することが知られているプロジェクトの 1 つとして挙げられています。Ubuntu は、ISO リファレンス実装である JasPer を使用しているようです。Ghostscript の Ubuntu パッケージ ソースには、openJPEG ではなく、ビルドの依存関係として JasPer (libjasper-dev) がリストされています。[ソース]

現時点では、異なるバージョンの Linux を試して、ghostscript のバージョンをビルドしてテストするしか方法がないようです。

4

1 に答える 1

3

1 つの可能性として、64 ビットの Linux と 32 ビットの Windows バイナリを実行していることが考えられます。

ただし、最も可能性の高い問題は、Linux ディストリビューションが「共有ライブラリ」を使用して Ghostscript をビルドすることを選択したことです。Ghostscript で使用される特定のサードパーティ ライブラリ (FReeType、Litle CMS など) は、静的ではなく動的にリンクし、実行時にロードできます。

画像は JPX (JPEG 2000) で、OpenJPEG ライブラリを使用します。ただし、Ghostscript に同梱されている OpenJPEG のソース コードは 1.5 バージョンではなく、1.5 に加えて、次の 2.0 からいくつかのビットを抜き出し、さらに追加する必要があったいくつかの修正を加えたものです (アップストリームにフィードしたので、それらは 2.0 に組み込まれると考えています)。近い将来、次のバージョンがリリースされたときに、このコードの標準バージョンを使用したいと考えています。

Linux ディストリビューションが共有ライブラリとして OpenJPEG を使用して Ghostscript をビルドすることを選択した場合、これらのソースの変更によるメリットは得られず、JPX デコーダーも同様に機能しません。GS の Windows ビルドには、サード パーティのライブラリを DLL としてビルドするための「すぐに使える」方法がないため、(自分で多くの作業を行わない限り) 常にサード パーティのソース コードを使用します。私たちが提供するライブラリ。

(Linux 上で) ソースから GS を自分でビルドすると、これが完全にうまく動作することがわかるでしょう。また、OpenJPEG のバージョンが使用されているだけで、PDF ファイルには実際には何も問題がないことをあえて提案します。

Ghostscript リポジトリにコミットするたびに 60,000 回のテストを実行しますが、実際に出荷するコードに対してこれらのテストを実行していることは明らかです。少なくとも、私たちが提供するコードを使用する限り、私たちが送信するものにある程度の自信があることを意味します. 共有ライブラリを使用して Ghostscript を構築することはお勧めしませんが、さまざまな Linux ディストリビューターを説得するようなことは何もしていません。

于 2012-08-14T13:43:50.163 に答える