如何将表添加为标题?

我正在使用iTextSharp尝试为我生成的PDF添加页眉和页脚,但是,如果我尝试添加宽度为页面100%的页眉,我会遇到一些问题。

所以我做了以下事情:

1)我创建了一个名为PdfHeaderFooter的类,它扩展了iTextSharp PdfPageEventHelper

2)进入PdfHeaderFooter我已经实现了生成标头的OnStartPage()方法:

// write on start of each page public override void OnStartPage(PdfWriter writer, Document document) { base.OnStartPage(writer, document); PdfPTable tabHead = new PdfPTable(new float[] { 1F }); PdfPCell cell; //tabHead.TotalWidth = 300F; tabHead.WidthPercentage = 100; cell = new PdfPCell(new Phrase("Header")); tabHead.AddCell(cell); tabHead.WriteSelectedRows(0, -1, 150, document.Top, writer.DirectContent); } 

如果我使用像tabHead.TotalWidth = 300F那样的东西; insted tabHead.WidthPercentage = 100; 它运行良好,但如果我尝试将tabHead.WriteSelectedRows(0,-1,150,document.Top,writer.DirectContent)设置为tabHead表的宽度(就像我在前面的例子中所做的那样)的100%方法它抛出以下exception:

表格宽度必须大于零。

为什么? 问题是什么? 如果我将其设置为100%,那么该表的大小是多少?

有人可以帮我解决这个问题吗?

TNX

使用writeSelectedRows() ,将宽度百分比设置为100%是没有意义的。 设置宽度百分比是指使用document.add()添加文档时(这是一种在页面事件中不能使用的方法)。 使用document.add() ,iText会根据页面大小和边距计算表格的宽度。

您正在使用writeSelectedRows() ,这意味着您有责任定义表的大小和坐标。

如果您希望表格跨越页面的整个宽度,您需要:

 table.TotalWidth = document.Right - document.Left; 

您还使用了错误的X坐标:您应该使用document.Left而不是150

附加信息:

  • 前两个参数定义起始行和结束行。 在您的情况下,您从第0行开始,这是第一行,并且您没有定义结束行(这意味着-1表示),在这种情况下,所有行都被绘制。
  • 您省略了列的参数( writeSelectedRows()的变体需要7个参数)。
  • 接下来,您将获得表格的起始坐标的X和Y值。
  • 最后,传递一个PdfContentByte实例。 这是您绘制表格的canvas。