【问题标题】:header and footer using itextsharp using c#使用 itextsharp 使用 c# 的页眉和页脚
【发布时间】:2017-08-10 06:42:51
【问题描述】:

我正在使用 itextsharp 使用 .net Web 应用程序生成 pdf。我已经使用 nuget 包 Install-Package iTextSharp -Version 5.5.10 安装了以下版本的 itextsharp。我已经看过样品并开发了 生成pdf的代码示例,它正在工作。但是我无法理解或将页眉页脚添加到 pdf 中。这是我正在使用的示例代码

public class Header : PdfPageEventHelper
{
    protected Phrase header;

    public void setHeader(Phrase header)
    {
        this.header = header;
    }

    public void onEndPage(PdfWriter writer, Document document)
    {
        PdfContentByte canvas = writer.DirectContent;
        ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT, header, 559, 806, 0);
    }
}   


Document pdfReport = null;
MemoryStream msReport = new MemoryStream();
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfReport, msReport);

if (!string.IsNullOrEmpty(HeaderText))
{
    Header objHeaderFooter = new Header();  
    //Here i need to assign the string HeaderText to Header. I dont know how to do it.                 
}

请帮助了解如何使用 itextSharp 分配 HeaderText。大多数开发人员示例都在 java 上 但我使用的是 .net c#。

【问题讨论】:

  • 解决方案看起来很复杂。我正在寻找一种更简单的方法来使用 c# 将页眉和页脚添加到 pdf 文件中
  • “解决方案很复杂”不是拒绝它的理由
  • 你为什么使用坐标559, 806?你确定这些是对的吗?您在答案的 cmets 中告诉我们标题没有显示,但如果 559, 806 是页面可见区域之外的坐标,那将是非常正常的。

标签: c# itext


【解决方案1】:

你想将HeaderText分配给objHeaderFooter

if (!string.IsNullOrEmpty(HeaderText))
{
    Header objHeaderFooter = new Header();  
    //Here i need to assign the string HeaderText to Header. I dont know how to do it.                 
}

假设HeaderText 是一个字符串,您可以使用Header 方法setHeader

objHeaderFooter.setHeader(new Phrase(HeaderText));

此外,您必须将 objHeaderFooter 分配给您的 PdfWriter 实例:

pdfWriter.PageEvent = objHeaderFooter;

因此:

if (!string.IsNullOrEmpty(HeaderText))
{
    Header objHeaderFooter = new Header();  
    objHeaderFooter.setHeader(new Phrase(HeaderText));
    pdfWriter.PageEvent = objHeaderFooter;
}

此外,每当您在 c# 中重写方法时,将其相应地标记为 override。特别是在您的页面事件侦听器中,使用

public override void onEndPage(PdfWriter writer, Document document)

这很容易忘记,尤其是在移植 java 示例时,因为在 java 中相应的标记 @Override 是可选的。


以下是op提供的示例代码

Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment; filename=abc.pdf");
            Response.Charset = "";            
            Response.BinaryWrite(getbinary());
            Response.End();  

  public byte[] getbinary()
        {
            Document pdfReport = null;
            pdfReport = new Document(PageSize.A4, 25, 25, 40, 25);
            MemoryStream msReport = new MemoryStream();
            PdfWriter pdfWriter = PdfWriter.GetInstance(pdfReport, msReport);

            pdfReport.Open();

            if (!string.IsNullOrEmpty("Header Text"))
            {
                Header objHeaderFooter = new Header();
                objHeaderFooter.SetHeader(new Phrase("Header Text"));
                pdfWriter.PageEvent = objHeaderFooter;
            }

            PdfPTable ptData1 = new PdfPTable(1);
            ptData1.SpacingBefore = 8;
            ptData1.DefaultCell.Padding = 1;
            ptData1.WidthPercentage = 100;
            ptData1.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
            ptData1.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;

            PdfPCell cell1 = new PdfPCell();
            cell1.BorderWidth = 0.001F;
            cell1.BackgroundColor = new BaseColor(250, 250, 250);
            cell1.BorderColor = new BaseColor(100, 100, 100);
            cell1.Phrase = new Phrase("Sample text");
            ptData1.AddCell(cell1);


            PdfPCell cell = new PdfPCell();
            cell.BorderWidth = 0.001F;
            cell.BackgroundColor = new BaseColor(200, 200, 200);
            cell.BorderColor = new BaseColor(100, 100, 100);

            cell.Phrase = new Phrase("test value");
            ptData1.AddCell(cell);
            pdfReport.Add(ptData1);

            pdfReport.Close();
            return  msReport.ToArray();

        }

public class Header : PdfPageEventHelper
    {
        protected Phrase header;

        public void SetHeader(Phrase header)
        {
            this.header = header;
        }

        public void onEndPage(PdfWriter writer, Document document)
        {
            PdfContentByte canvas = writer.DirectContent;
            ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT, header, 559, 806, 0);
        }
    }

【讨论】:

  • 我试过这样做。但我仍然没有看到 pdf 中的标题。有什么遗漏的吗。还是特定于浏览器的
  • 它不是特定于浏览器的。因此,缺少一些东西。不幸的是你的代码不是sscce,所以我不能用它来检查。
  • 一个使用 c# 的简短示例会对我有所帮助,
  • 我目前只使用智能手机。我稍后会调查。
  • @jaiganesh 我认为你误解了 mkl(我希望你不是故意的)。 Mkl 要求你提供一个SSCCE,这意味着需要提供一个例子,以便我们可以看看你做错了什么。 official web site 上有数百个例子。你为什么不试试这些例子之一?我很想结束你的问题,因为之前已经回答过很多次了,而且答案一点也不复杂!
【解决方案2】:

这可能是一种解决方法。添加标题作为另一个单元格值 下面是代码

 if (!string.IsNullOrEmpty(HeaderText))
            {
                PdfPTable Header = new PdfPTable(1);
                Header.SpacingBefore = 8;
                Header.DefaultCell.Padding = 1;
                Header.WidthPercentage = 100;
                Header.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
                Header.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;

                PdfPCell cell1 = new PdfPCell();
                cell1.BorderWidth = 0.001F;
                cell1.BackgroundColor = new BaseColor(250, 250, 250);
                cell1.BorderColor = new BaseColor(100, 100, 100);
                cell1.Phrase = new Phrase(HeaderText, fontBold);
                Header.AddCell(cell1);
                pdfReport.Add(ptDataHeader);
            }

【讨论】:

  • 您的回答与您的问题有任何关系吗?您要求在文件中添加页眉和页脚,现在您认为表格可以解决该问题?
  • 我已取消标记答案并标记了我之前更新的另一个答案。错误在下面一行中。它应该是作为 public override void OnnEndPage(PdfWriter writer, Document document) 工作的。
  • 这确实非常重要。当您接受我的回答时,我对此添加了评论。我想我并没有真正看过Header 代码,因为问题集中在如何使用itextSharp 分配HeaderText
猜你喜欢
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2015-03-04
  • 2013-07-27
相关资源
最近更新 更多