我需要为使用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"但不是"标题",我做错了什么?
答案 0 :(得分:1)
您的主要问题是:
PdfPTable headerrow = new PdfPTable(7);
您正在尝试创建一个7列表,但只向其添加一个单元格。默认情况下,iTextSharp不会为您自动完成丢失的单元格。将其更改为:
PdfPTable headerrow = new PdfPTable(1);
正如@mkl在评论中所说,你也应该切换到OnEndPage
而不是OnStartPage
。您的代码现在可能正常工作,但您也可能在某些条件下遇到无限循环。 Direct from the source comments说:
请注意,即使未写入页面,仍会调用此方法。最好使用
onEndPage
来避免无限循环。