【问题标题】:How to add a table as a header?如何将表格添加为表头?
【发布时间】:2014-05-12 14:44:06
【问题描述】:

我正在使用 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%,它怎么可能有 0 大小?

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

Tnx

【问题讨论】:

  • 想想百分比是多少。您将宽度百分比设置为 100%。相信你还是要设置TotalWidth

标签: c# pdf pdf-generation itextsharp itext


【解决方案1】:

当使用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 实例。这是您在其上绘制表格的画布。

【讨论】:

  • 你能解释一下这 5 个 WriteSelectedRows() 参数的含义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 2019-01-17
相关资源
最近更新 更多