我需要在使用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/