2013-04-11 3 views
0

Мне нужно разместить гиперссылку в нижнем колонтитуле моего PDF, сгенерированного с помощью iTextSharp.Гиперссылка на нижнем колонтитуле с использованием itextSharp

Я знаю, как использовать 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); 

ответ

2

Объект Document обычно позволяет работать с абстрактные вещи, такие как Paragraph и Chunk, но при этом вы теряете абсолютное позиционирование. Объекты PdfWriter и PdfContentByte дают вам абсолютное позиционирование, но вам нужно работать с объектами более низкого уровня, такими как исходный текст.

К счастью, есть счастливый объект средней земли под названием 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(); 

    } 
} 
+0

Удивительный Крис, он работает, и я многому научился от этого кода, делающего новые трюки! Благодаря! –

Смежные вопросы