我需要在使用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”而不是“ headerrow”一样,我在做什么错呢?

最佳答案

您的主要问题是:

PdfPTable headerrow = new PdfPTable(7);


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

PdfPTable headerrow = new PdfPTable(1);


正如@mkl在评论中所说,您还应该切换到OnEndPage而不是OnStartPage。您的代码现在可能按原样工作,但在某些情况下也可能会陷入无限循环。 Direct from the source comments说:


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

关于c# - 具有多个元素的PdfPageEventHelper,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24605574/

10-11 02:00