0

iTextSharp を使用して生成された PDF のフッターにハイパーリンクを配置する必要があります。

PdfPageEventHelper を使用してフッターにテキストを印刷する方法は知っていますが、ハイパーリンクを配置する方法は知っていません。

    public class PdfHandlerEvents: PdfPageEventHelper
    {
        private PdfContentByte _cb;
        private BaseFont _bf;

        public override void OnOpenDocument(PdfWriter writer, Document document)
        {
            _cb = writer.DirectContent;
        }

        public override void OnEndPage(PdfWriter writer, Document document)
        {
            base.OnEndPage(writer, document);

            _bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            Rectangle pageSize = document.PageSize;

            _cb.SetRGBColorFill(100, 100, 100);

            _cb.BeginText();
            _cb.SetFontAndSize(_bf, 10);
            _cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "More information", pageSize.GetRight(200), pageSize.GetBottom(30), 0);
            _cb.EndText();
        }
    } 

「詳細情報」というテキストをハイパーリンクにするにはどうすればよいですか?

編集:

以下のクリスからの回答の後、フッターに画像を印刷する方法もわかりました。コードは次のとおりです。

            Image pic = Image.GetInstance(@"C:\someimage.jpg");
            pic.SetAbsolutePosition(0, 0);
            pic.ScalePercent(25);

            PdfTemplate tpl = _cb.CreateTemplate(pic.Width, pic.Height);
            tpl.AddImage(pic);
            _cb.AddTemplate(tpl, 0, 0);
4

1 に答える 1

2

通常、このオブジェクトを使用すると、 や などDocumentの抽象的なものを操作できますが、そうすると絶対的な位置が失われます。およびオブジェクトを使用すると、絶対的な位置を指定できますが、生のテキストなどの下位レベルのオブジェクトを操作する必要があります。ParagraphChunkPdfWriterPdfContentByte

幸いなことに、ColumnTextあなたが探していることをするはずの、中途半端なオブジェクトがあります。は基本的にテーブルと考えることができColumnText、ほとんどの人はそれを単一の列テーブルとして使用するため、実際にはオブジェクトを追加する長方形と考えることができます。質問がある場合は、以下のコードのコメントを参照してください。

public class PdfHandlerEvents : PdfPageEventHelper {
    private PdfContentByte _cb;
    private BaseFont _bf;

    public override void OnOpenDocument(PdfWriter writer, Document document) {
        _cb = writer.DirectContent;
    }

    public override void OnEndPage(PdfWriter writer, Document document) {
        base.OnEndPage(writer, document);

        _bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        iTextSharp.text.Rectangle pageSize = document.PageSize;

        //Create our ColumnText bound to the canvas
        var ct = new ColumnText(_cb);
        //Set the dimensions of our "box"
        ct.SetSimpleColumn(pageSize.GetRight(200), pageSize.GetBottom(30), pageSize.Right, pageSize.Bottom);
        //Create a new chunk with our text and font
        var c = new Chunk("More Information", new iTextSharp.text.Font(_bf, 10));
        //Set the chunk's action to a remote URL
        c.SetAction(new PdfAction("http://www.aol.com"));
        //Add the chunk to the ColumnText
        ct.AddElement(c);
        //Tell the ColumnText to draw itself
        ct.Go();

    }
}
于 2013-04-11T13:31:40.227 に答える