1

Redhat 5.x Linux 環境の JBoss AS5 で実行されている Java サーブレットから使用して PDF を 1.5 から 1.4 バージョンに変換できるオープン ソースまたは合理的な商用ライセンス製品を期待しています。

または、PDF 1.5 コンテンツを変更して 1.4 互換フォーマットに戻すために使用できるトリック。本当に何でも。

サーブレットへの応答として返そうとしている PDF があります。しかし、これは 1.5 形式であり、クライアントの adobe5 の古いバージョンの一部では表示されません。しかし、それは 1.4 で表示されるので、可能であれば変換する方法が必要です。

他の回避策はありますか?アイデア?ぜひ聞きたいです!

あなたが私を助けることができるかどうか私に知らせてください!

4

2 に答える 2

2

問題が実際に (単に)ドキュメントで主張されているバージョン番号ではなく、PDF 1.5 以降 (したがって、Adobe Reader 6 以降) で許可されている根本的に変更されたドキュメント ファイル構造にある場合 --- つまり、クロス リファレンス ストリーム (クロス リファレンスではなく)テーブル) とオブジェクト ストリーム --- iText ライブラリを使用した次のコードが役立つ場合があります。

PdfReader reader = new PdfReader(SOURCE);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(TARGET), '4');
stamper.close();

これにより、元の PDF ファイルが実際に解析され、解析された PDF オブジェクトから新しい PDF ファイルが作成されます。ただし、デフォルトでは、iText は相互参照またはオブジェクト ストリームを使用しません。したがって、新しい PDF ファイルにはどちらも含まれていません。

は、ターゲット ファイルの'4'ヘッダーでバージョン 1.4 を宣言するように iText に指示します。

PdfReaderPDF のサイズと利用可能なリソースによっては、すべてのソース PDF を一度にメモリに読み込むのではなく、必要な場合にのみ別のコンストラクタを使用したい場合があります。

PS: 現在の iText 5.4.x バージョンを使用しています。iText は、AGPL の条件に従って無料で、または商用で利用できます。

PPS: 代わりに、iText に相互参照とオブジェクト ストリームを強制的に使用させたい場合は、 をstamper.setFullCompression()構築した後に呼び出す必要がありますstamper

于 2013-03-20T16:41:46.363 に答える
1

ドキュメント カタログでオーバーライド バージョン情報を見つけることもできるため、ヘッダーの pdf バージョンを変更しても機能しません。

pdfファイル形式仕様より引用

PDF ファイルの最初の行のヘッダーは、PDF バージョンを指定します (7.5.2「ファイルヘッダー」を参照)。PDF 1.4 以降、ドキュメント カタログのバージョン エントリで PDF バージョンを指定することもできます。基本的に、ファイル ヘッダーで指定されたバージョンを上書きすることで、ファイルに関連付けられたバージョンを更新します (7.7.2「ドキュメント カタログ」を参照)。以下の段落で説明するように、文書を開いたり保存したりする際の適合製品の動作は、PDF ファイルのバージョンと適合製品がサポートする PDF のバージョンを比較することによって異なります。

于 2013-03-20T16:53:12.020 に答える