2016-11-24 10 views
0

次のコードを使用すると、1つのイメージしか追加されません。すべてのページに画像&のテキストを追加するオプションはありますか?itextsharpを使用してpdfファイルの各ページのヘッダーにテキストを含むイメージを追加します。

private void AddHeader(文字列ファイル物理パス、文字列nfile) { byte [] bytes = System.IO.File.ReadAllBytes(filephysicalpath); 文字列パス= ConfigurationManager.AppSettings ["Documentheader"] ToString()+セッション["headerImg"]; ストリームinputImageStream =新しい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を使用してイメージを追加します。代わりに、ページiOverContentを使用する必要があります。

 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); 

ポインタがストリームの最後にあり、次の呼び出しが空のイメージを返しますか?あなたのループでは

+0

まだ最初のページにのみヘッダーを追加します。すべてのページにヘッダー(テキスト付きの画像)を追加する他の解決策です。 –

関連する問題