使用itextSharp在页脚处超链接

时间:2013-04-11 07:53:08

标签: itextsharp

我需要在使用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();
        }
    } 

如何将“更多信息”文本设为超链接?

编辑:

在下面的Chris的答案之后,我也想出了如何在页脚打印图像,这是代码:

            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);

1 个答案:

答案 0 :(得分:2)

Document对象通常允许您使用ParagraphChunk之类的抽象内容,但这样做会失去绝对定位。 PdfWriterPdfContentByte对象为您提供绝对定位,但您需要使用原始文本等较低级别的对象。

幸运的是,有一个叫做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();

    }
}