2016-11-24 43 views
0

當我們使用下面的代碼時,它只添加一個圖像。是否有其他選擇在每個頁面上添加圖像&文字?使用itextsharp在pdf文件的每個頁面的標題中添加帶有文本的圖像

private void AddHeader(string filephysicalpath,string nfile) byte [] bytes = System.IO.File.ReadAllBytes(filephysicalpath); String path = ConfigurationManager.AppSettings [「Documentheader」]。ToString()+ Session [「headerImg」]; Stream inputImageStream = new FileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read);

 Font blackFont = FontFactory.GetFont("Arial", 12, Font.BOLD, BaseColor.BLACK); 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      PdfReader reader = new PdfReader(bytes); 
      using (PdfStamper stamper = new PdfStamper(reader, stream)) 
      { 
       int pages = reader.NumberOfPages; 

       for (int i = 1; i <= pages; i++) 
       { 
        string footer = Convert.ToString(Session["Footer"]); 
        if (Session["Footer"] != null) 
        { 
         // Phrase ft = new Phrase(footer, blackFont); 
         float marginLR = 36; 
         float marginB = 2; 
         float footerHeight = 10; 
         Rectangle pagesize = reader.GetCropBox(i); 
         if (pagesize == null) 
         { 
          pagesize = reader.GetPageSize(i); 
         } 
         Rectangle rect = new Rectangle(
           pagesize.Left + marginLR, pagesize.Top + marginB, 
           pagesize.Right - marginLR, pagesize.Top + marginB + footerHeight 
          ); 



         iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream); 
         image.SetAbsolutePosition(rect.Left, rect.Top - image.ScaledHeight); 
         var pdfContentByte = stamper.GetOverContent(1); 
         pdfContentByte.AddImage(image); 
         inputImageStream.Seek(0L, SeekOrigin.Begin); 
         // ct.AddElement(new PdfPTableHeader (image)); 

        } 
       } 
      } 
      reader.Close(); 
      bytes = stream.ToArray(); 
     } 
     System.IO.File.WriteAllBytes(filephysicalpath, bytes); 
    } 

回答

1

在你的循環,你做

 var pdfContentByte = stamper.GetOverContent(1); 
     pdfContentByte.AddImage(image); 

即你總是使用第1頁的OverContent並將圖像添加到它。相反,你應該使用i頁的OverContent

 var pdfContentByte = stamper.GetOverContent(i); 
     pdfContentByte.AddImage(image); 

此外,你應該導入圖像只有一次,即招行

 iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream); 

上述循環。

+0

我想改變標題圖像的高度和寬度。是否有任何解決方案 –

+0

是的,iText'Image'類中有許多方法可以按某種因子進行縮放或適合某個目標尺寸。 – mkl

0

您是否嘗試在下次使用之前將inputImageStream設置爲開始?

inputImageStream.Seek(0L, SeekOrigin.Begin); 

Meybe它的指針在流的末尾,下一次調用返回空圖像?

+0

仍然我只在第一頁添加標題,是任何其他解決方案添加標題(圖像與文本)onn每頁 –

相關問題