仕様の側面は次のとおりです。リンクは、リンク注釈をページに配置することによって作成されます。リンク注釈は、Rect キーまたは一連の四角形のいずれかで表されます。長方形を扱っているとしましょう。リンクを配置するには、少なくとも次のような辞書が必要です。
<< /Type /Annot /Subtype /Link /Rect [ x1 y1 x2 y2 ] >>
(x1, y1) と (x2, y2) は、リンクのアクティブ領域が存在する長方形の角を表します。
これを処理するには、これを PDF 内の間接オブジェクトにし、ページの Annots 配列から参照する必要があります。
これを作成できれば、どこにも行かないページにリンクが表示されます。
リンクをどこかに移動するには、リンク注釈に /Dest または /A エントリのいずれかが必要です (両方ではない)。/Dest は、ページ レベルのナビゲーション用の古いアーティファクトです。これは使用しません。代わりに、アクション ディクショナリである /A エントリを使用します。したがって、URL http://www.google.comに移動する場合は、注釈を次のようにします。
<< /Type /Annot /Subtype /Link /Rect [ x1 y1 x2 y2 ]
/A << /Type /Action /S /URI /URI (http://www.google.com) >>
>>
iTextSharp でこれを行う方法については、特にお手伝いできません。私は、彼らが使用するモデルや抽象化が特に好きではありません。私は Atalasoft 用の PDF ツールキットを書いています。私自身のツールキットでそれを行う方法を紹介します。繰り返しますが、私はこれが商用製品であり、生計を立てていることを隠そうとはしていません. 他のオプションが利用可能であることを確認したいだけです。
// make a document, add a font, get its metrics
PdfGeneratedDocument doc = new PdfGeneratedDocument();
string fontResource = doc.Resources.Fonts.AddFromFontName("Times New Roman");
PdfFontMetrics mets = doc.Resources.Fonts.Get(fontResource).Metrics;
// make a page, place a line of text
PdfGeneratedPage page = doc.Pages.AddPage(PdfDefaultPages.Letter);
PdfTextLine line = new PdfTextLine(fontResource, 12.0, "Visit my web site.",
new PdfPoint(72, 400));
page.DrawingList.Add(line);
// get the bounds of the text we place, make an annotation
PdfBounds bounds = mets.GetTextBounds(12.0, "Visit my web site.");
bounds = new PdfBounds(72, 400, bounds.Width, bounds.Height);
LinkAnnotation annot = new LinkAnnotation(bounds, new PdfURIAction(new URI("my url")));
page.Annotations.Add(annot);
// save the content
doc.Save("finaldoc.pdf");
「トリッキー」な唯一のことは、ページ上のコンテンツとリンク注釈の間に分離があることですが、これは、Acrobat がリンクをモデル化する方法であるためです。既存のドキュメントを変更する場合は、既存のファイル/ストリームから PdfGeneratedDocument を作成し、注釈を追加してから保存します。