2017-08-10 47 views
1

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

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#。

+1

重复? https://stackoverflow.com/questions/18996323/add-header-and-footer-for-pdf-using-itextsharp – Ben

+0

解决方案看起来很复杂。我正在寻找一种更简单的方法来添加页眉和页脚到PDF文件使用c# –

+0

“解决方案很复杂”不是拒绝它的参数 – mihail

回答

1

你要分配HeaderTextobjHeaderFooter

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); 
     } 
    } 
+0

我试过了,但我仍然没有在pdf中看到标题。有什么遗漏吗?或者它是浏览器特定的 –

+0

它不是浏览器特定的。因此,缺少某些东西。不幸的是你的代码不是[sscce](http://sscce.org),所以我不能用它来检查。 – mkl

+0

使用c#的简短示例将帮助我, –

0

可能是这可能被用来作为一种解决方法。加入标头,如另一个小区值 下面是代码

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); 
      } 
+0

您的答案与您的问题有任何关系?您要求为文件添加页眉和页脚,现在您考虑一个表格来解决这个问题吗? – mkl

+0

我没有标记答案,并标记了我之前更新的另一个答案。如何在下面的线路中发生错误。它应该是作为公共覆盖无效OnnEndPage(PdfWriter作家,文档文档)正在工作。 –

+0

确实非常重要。当你接受我的回答时,我对此加了一个评论。我想我没有真正关注'Header'代码,因为问题集中在如何使用itextSharp *来分配HeaderText。 – mkl

相关问题