iText APIを使用してPDFファイル内のすべてのブックマークの宛先を作成します

StackOverflow https://stackoverflow.com/questions/173495

質問

PDFドキュメントを受け取り、すべてのブックマークから名前付きの宛先を作成する(java)コードを作成したいと思います。 iText APIがこれを行う最も簡単な方法だと思いますが、以前はAPIを使用したことがありません。

この種のコードをiText APIでどのように記述しますか? iTextは、既存のPDFを単独で操作するために必要な解析を実行できますか?私が考えている操作の種類は次のとおりです。

  • 開く、
  • ブックマークを見つける、
  • 宛先の作成、
  • 保存、
  • 閉じる。

またはより良い別のAPIがありますか?

役に立ちましたか?

解決

これに失望する可能性があることを前もって警告します。 iTextは、実際にはパーサーとして使用することを目的としていません。それは本当にまったく新しい PDFドキュメントを作成するためのより多くのことですが、あなたはそれを強打することができます。

開始するには、iTextを使用して、既存のPDFドキュメントを変更することはできません。ただし、 できることは、必要な追加機能を備えたコピーを作成することです。 (他の誰かがよりよく知っているなら、私に知らせてください 、これは私を夢中にさせます。)

あなたがしたいことは、ソースファイルの入力ストリームからPdfReaderオブジェクトを作成することです。次に、宛先のPdfCopyオブジェクト(既存のソースからデータを取得するのに便利な単なる拡張PdfWriter)を作成します。

私が知る限り、ブックマークはiTextから取得できません。別のライブラリが必要になる場合があります。 jpedal はそれらを抽出する機能を持っているかもしれません(XMLとして取得できます)必要なものを取得するために解析する必要がある場合があります)。ただし、取得した場合は、java.util.Listに追加し、そのリストをPDFCopyのアウトラインとして設定できます。ブックマーク自体は、特定のキーのセットを備えた単なるHashMapです。すべての値が何であるかはわかりませんが、「タイトル」、「アクション」が含まれています。 (これが名前付きの宛先であることを指定する場所のようですが、その値がどうなるかはわかりません)、および" URI" (これが外部リンクの場合に使用されます-リンク先の名前付き宛先の名前を指定すると思われます)。繰り返しますが、詳細を見つけるのは困難です。

次に、リーダーのページを反復処理し、各ページをPdfCopyにインポートします。 このページが役立ちます。

ごめんなさい。幸運を祈ります。

PS他の誰かが(L)GPLまたはBSDライセンスの優れたツールを知っているなら、私はそれについて聞きたいです。

他のヒント

フォローアップ:数か月前にiTextにテキスト解析機能を追加するパッチを提出しました(現在は受け入れられ、HEADの一部です)。 PdfBox(下記を参照)には、古い外部参照テーブル形式ではなく外部参照ストリームを使用する新しいPDFの読み取りに問題がありました(ありましたか?)。


既存のPDFファイルの解析に非常に優れている 別のライブラリは、 PdfBox です。既存のPDFの変更にも使用できます。参考までに、これはLuceneが使用するテキストパーサーです。

また、iTextにはPDFファイルを解析する機能があります ことにも言及しますが、各ページのテキストコンテンツの解析にはあまり適していません。ブックマークなどを保存するために使用されるPDF上位レベルの構造(辞書など)へのアクセスを検討しており、PDF仕様を読むのに手を汚すことを気にしないなら、絶対にあなたが尋ねていることをしてください(私たちはかなり自分でやっています)。

PDF仕様は大きいですが、ほとんどの部分が読み取り可能です。ブックマークを抽出するだけなら、その大部分(実際のページコンテンツとレンダリングを対象としています)を心配する必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top