2017-08-10 118 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