PdfPageEventHelper有多个元素

时间:2014-07-07 07:56:50

标签: c# itextsharp

我需要为使用itextsharp生成的pdf报告的所有页面添加徽标和标题表。我可以正确添加徽标,但不能添加标题表。

这是我的代码:

public class pdfPage : iTextSharp.text.pdf.PdfPageEventHelper
{           
    public override void OnStartPage(PdfWriter writer, Document doc)
    {
        PdfPTable headerTbl = new PdfPTable(1);

        headerTbl.TotalWidth = doc.PageSize.Width;

        Image logo = Image.GetInstance("logo.png");

        logo.ScalePercent(42);

        PdfPCell cell = new PdfPCell(logo);

        cell.HorizontalAlignment = Element.ALIGN_LEFT;

        cell.PaddingRight = 52;

        cell.Border = 0;

        headerTbl.AddCell(cell);

        headerTbl.WriteSelectedRows(0, -1, 0, (doc.PageSize.Height - 10), writer.DirectContent);

        PdfPTable headerrow = new PdfPTable(7);
        headerrow.TotalWidth = 570f;
        headerrow.LockedWidth = true;
        headerrow.AddCell(new Phrase("TIPO DOCUMENTO", new Font(Font.FontFamily.HELVETICA, 6f)));

        headerrow.WriteSelectedRows(0, -1, 0, (doc.PageSize.Height - 50), writer.DirectContent);
    }
}

正如我所说,页面事件添加" headerTbl"但不是"标题",我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的主要问题是:

PdfPTable headerrow = new PdfPTable(7);

您正在尝试创建一个7列表,但只向其添加一个单元格。默认情况下,iTextSharp不会为您自动完成丢失的单元格。将其更改为:

PdfPTable headerrow = new PdfPTable(1);

正如@mkl在评论中所说,你也应该切换到OnEndPage而不是OnStartPage。您的代码现在可能正常工作,但您也可能在某些条件下遇到无限循环。 Direct from the source comments说:

  

请注意,即使未写入页面,仍会调用此方法。最好使用onEndPage来避免无限循环。