問題が実際に (単に)ドキュメントで主張されているバージョン番号ではなく、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 に指示します。
PdfReader
PDF のサイズと利用可能なリソースによっては、すべてのソース PDF を一度にメモリに読み込むのではなく、必要な場合にのみ別のコンストラクタを使用したい場合があります。
PS: 現在の iText 5.4.x バージョンを使用しています。iText は、AGPL の条件に従って無料で、または商用で利用できます。
PPS: 代わりに、iText に相互参照とオブジェクト ストリームを強制的に使用させたい場合は、 をstamper.setFullCompression()
構築した後に呼び出す必要がありますstamper
。