【问题标题】:itextsharp pdfpcell headeritextsharp pdfpcell 标头
【发布时间】:2010-12-02 06:30:51
【问题描述】:

我想要一个 PdfPCell 类的单元格表,每个单元格都有一个小标题、主字符串和小页脚。我找不到插入它们的方法,因为不允许将 HeaderandFooter 元素添加到单元格中,一个段落会覆盖另一个段落,依此类推。有什么想法吗?

提前致谢

【问题讨论】:

    标签: c# java pdf pdf-generation itextsharp


    【解决方案1】:

    您可以使用嵌套表。
    插入一个 1x1 的表格,而不是 PdfPCell,该表格带有一个很小的页眉和一个很小的页脚。

    编辑:

    让我们忘记 iTextSharp 的表格页脚和页眉功能,因为它在表格跨越多个页面并且您重复页脚和页眉时很有用。在我们的例子中,页眉和页脚将属于仅包含 3 个单元格的内部表格,因此我们对所有单元格都使用 PdfPCell。

    然后主函数是GetHFCell,它将返回一个包含自定义标题单元格(高度、字体、文本、..)、自定义页脚单元格和包含主文本的中间单元格的 PdfPTable。 每当我们想向主表添加一个单元格时,都会调用此函数(GeneratePDF 中的如何使用此函数的示例)。

        private static PdfPTable GetHFCell(string header, string footer, string text)
        {
            PdfPTable pdft;
            PdfPCell hc;
            PdfPCell fc;
    
            pdft = new PdfPTable(1);
            pdft.WidthPercentage = 100f;
            pdft.DefaultCell.Border = 0;
    
            hc = new PdfPCell(new Phrase(header));
            hc.Top = 0f;
            hc.FixedHeight = 7f;
            hc.HorizontalAlignment = 1;
            hc.BackgroundColor = iTextSharp.text.Color.ORANGE;
            ((Chunk)(hc.Phrase[0])).Font = new iTextSharp.text.Font(((Chunk)(hc.Phrase[0])).Font.Family, 5f);
    
            fc = new PdfPCell(new Phrase(footer));
            hc.Top = 0f;
            fc.FixedHeight = 7f;
            hc.HorizontalAlignment = 1;
            fc.BackgroundColor = iTextSharp.text.Color.YELLOW;
            ((Chunk)(fc.Phrase[0])).Font = new iTextSharp.text.Font(((Chunk)(fc.Phrase[0])).Font.Family, 5f);
    
            pdft.AddCell(hc);
            pdft.AddCell(text);
            pdft.AddCell(fc);
    
            return pdft;
        }
    
        public void GeneratePDF()
        {
            Document document = new Document();
            try
            {            
                PdfWriter.GetInstance(document, new FileStream("File1.pdf", FileMode.Create));
    
                document.Open();
    
                PdfPTable table = new PdfPTable(5);
                table.DefaultCell.Padding = 0;
                table.DefaultCell.BorderWidth = 2f;
                for (int j = 1; j < 6; j++)
                {
                    for (int i = 1; i < 6; i++)
                    {
                        //calling GetHFCell
                        table.AddCell(
                            GetHFCell("header " + ((int)(i + 5 * (j - 1))).ToString(), 
                                      "footer " + ((int)(i + 5 * (j - 1))).ToString(), 
                                      "z" + j.ToString() + i.ToString()));
                    }
                }
    
                document.Add(table);
            }
            catch (DocumentException de)
            {
                //...
            }
            catch (IOException ioe)
            {
                //...
            }
            document.Close();
        }
    

    【讨论】:

    • 是的,这就是我想要做的,但到目前为止没有成功。你能再具体一点吗?我试图用 1 列创建一个新的 PdfPTable。我为页眉设置了 1 行,为页脚设置了 1 行。但是,我无法强迫他们进入那张桌子。
    • 我不得不从您的帖子中删除图片,因为 ImageShack 已将其删除并替换为广告。请参阅meta.stackexchange.com/q/263771/215468 了解更多信息。如果可能,您最好重新上传它们。谢谢!
    猜你喜欢
    • 2014-09-21
    • 2013-11-18
    • 2014-03-04
    • 2011-06-20
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2016-01-12
    相关资源
    最近更新 更多