2014-05-12 87 views
0

我正在与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;它工作得很好,但如果我尝试设置为100%的TabHead表格的宽度(如我在前面的示例中所做的那样),当它调用tabHead.WriteSelectedRows(0,-1,150,document.Top,writer。 DirectContent)方法抛出以下异常:

表宽度必须大于零。

为什么?问题是什么?如果我将它设置为100%,表格大小有多可能会如何?

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

TNX

+0

想想百分比*是多少*。您将宽度百分比设置为100%。我相信你仍然需要设置'TotalWidth'。 –

回答

6

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

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

如果你想表跨越页的整个宽度,您需要:

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

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

附加信息:

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

完美答案!!! – AndreaNobili

+0

你能解释我wath究竟是什么意思5 WriteSelectedRows()参数? – AndreaNobili

+1

我会更新我的答案。 –

相关问题