シナリオ:
iTextSharp を使用して PDF ファイルのハイパーリンクをスコージするアプリケーションがあります。
PDF のハイパーリンクはファイル構造の「注釈オブジェクト」のサブタイプであるため、私のコードは基本的に (1) ファイルを読み取り、(2) ページをループし、(3) ページの注釈コレクションを取得し、( 4) ページのハイパーリンク注釈を抽出します。
問題
/ANNOTS
特定のページを表す「pdf 辞書」オブジェクトに、注釈のコレクション (no ) キーがない場合があります。したがって、そのようなコレクションを取得しようとする試みは を返しnull
ます。問題のページに明確に表示され、クリック可能なリンクがある場合に時々発生するため、これは問題です。
プレーン テキストに URL アドレスが存在する可能性があることは理解しているため、クリック可能であることが重要であることに注意してください。
コード
提供された回答で同様のSOの質問(http://stackoverflow.com/questions/6959076/reading-hyperlinks-from-pdf-file)を見つけましたが、これは私がすでに使用しているコードとほぼ同じです。主な違いは次のとおりです。
// My code
var pdfAnnotations = (PdfArray)PdfReader.GetPdfObject(pageDict.Get(PdfName.ANNOTS));
foreach (var annotation in pdfAnnotations.ArrayList) {}
{
// Chris' code
var annotsArray = pageDict.GetAsArray(PdfName.ANNOTS);
foreach(var annotation in annotsArray.ArrayList) { }
// My pageDict.Get() and Chris's pageDict.GetAsArray() methods both
// return null because there is no ANNOTS key present in pageDict.
質問
なぜ null 値なのですか? 明白に表示/クリック可能なリンクを含むPDFドキュメントに注釈コレクションがないのはどうしてですか? ハイパーリンク/URI を表すファイル構造内に他のPdfObject
サブタイプはありますか?
ありがとう