2016-11-24 1 views
0

아래 코드를 사용하면 하나의 이미지 만 추가됩니다. 모든 페이지에 이미지 &을 추가하는 다른 옵션이 있습니까?itextsharp를 사용하여 pdf 파일의 모든 페이지 헤더에 텍스트가있는 이미지 추가

개인 무효 AddHeader (문자열 filephysicalpath 문자열 nfile에) { 바이트 [] 바이트 = System.IO.File.ReadAllBytes (filephysicalpath); String path = ConfigurationManager.AppSettings [ "Documentheader"]. ToString() + Session [ "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

여전히 첫 페이지에만 헤더를 추가합니다. 모든 페이지에 헤더 (텍스트가있는 이미지)를 추가하는 다른 해결책은 –

관련 문제