C# 如何添加表格作为标题?

C# 如何添加表格作为标题?,c#,pdf,pdf-generation,itextsharp,itext,C#,Pdf,Pdf Generation,Itextsharp,Itext,我正在使用iTextSharp尝试将页眉和页脚添加到生成的PDF中,但是,如果我尝试添加宽度为页面100%的页眉,我会遇到一些问题 所以我做了以下几件事: 1) 我已经创建了一个名为PdfHeaderFooter的类,它扩展了iTextSharpPdfPageEventHelper类 2) 在PdfHeaderFooter中,我实现了生成标题的OnStartPage()方法: // write on start of each page public override void

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

所以我做了以下几件事:

1) 我已经创建了一个名为PdfHeaderFooter的类,它扩展了iTextSharpPdfPageEventHelper

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这样的东西instedtabHead.WidthPercentage=100它工作得很好,但是如果我在调用tabHead.WriteSelectedRows(0,-1150,document.Top,writer.DirectContent)方法时尝试将tabHead表的宽度设置为100%(如前一个示例中所做的那样),它会引发以下异常:

表格宽度必须大于零。

为什么??有什么问题?如果我将表的大小设置为100%,怎么可能表的大小为0

有人能帮我解决这个问题吗


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
    实例。这是你在上面画桌子的画布

使用
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
    实例。这是你在上面画桌子的画布

想想百分比是多少。您正在将宽度百分比设置为100%零。我相信您仍然需要设置
总宽度
。想想百分比是多少。您正在将宽度百分比设置为100%零。我相信您仍然需要设置
总宽度
。您能解释5个WriteSelectedRows()参数的确切含义吗?您能解释5个WriteSelectedRows()参数的确切含义吗?