7

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

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

  • 開ける、
  • ブックマークを見つけて、
  • 目的地を作成し、
  • 保存、
  • 近い。

それとも、より良い別の API がありますか?

4

2 に答える 2

6

フォローアップ: 数か月前に、iText にテキスト解析機能を追加するパッチを iText に提出しました (現在は承認され、HEAD の一部になっています)。PdfBox (後述) には、古い xref テーブル形式の代わりに xref ストリームを使用する新しい PDF の読み取りに問題があります (あった?)。


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

また、iText にはPDF ファイルを解析する機能があることにも触れておきますが、各ページのテキスト コンテンツを解析するのは得意ではありません。ブックマークなどを保存するために使用される PDF の上位レベルの構成要素 (辞書など) にアクセスすることを考えていて、PDF 仕様を読んで少し手を汚してもかまわない場合は、次のことができます。あなたが求めていることは絶対に実行します(私たちはかなり自分たちでやっています)。

PDF 仕様は大きいですが、ほとんどの部分は読みやすく、ブックマークを抽出するだけであれば、(実際のページ コンテンツとレンダリングに合わせて調整された) 大量のファイルについて心配する必要はありません。

于 2008-10-07T04:17:45.043 に答える
3

これにがっかりするかもしれないことを前もって警告します。iTextは、実際にはパーサーとして使用することを目的としたものではありません。まったく新しいPDFドキュメントを作成するためのものですが、それを試してみることができます。

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

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

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

次に、リーダーのページを繰り返し処理し、各ページをPdfCopyにインポートします。 このページはあなたを助けるかもしれません。

申し訳ありませんが、私はあなたにこれ以上役に立ちません。幸運を。

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

于 2008-10-06T19:28:50.103 に答える