2017-03-15 1 views
0

pdfstamper를 사용하여 기존 PDF 페이지 하단에 배너 이미지를 추가하려고합니다. 나는 그것을 표시하고있다. 그러나 중심에 정렬시키는 방법을 찾을 수 없다. 다음과 같이ItextSharp pdfstamped 사각형 내에서 이미지 정렬

내 코드는 다음과 같습니다

using (PdfStamper stamper = new PdfStamper(reader, ms, '\0', true)) 
      { 
       var cropbox = reader.GetCropBox(1); 
       float left = cropbox.Left; 

       iTextSharp.text.Image bannerImage = iTextSharp.text.Image.GetInstance(bannerUrl); 
       var rectangle = new iTextSharp.text.Rectangle(5, 5, cropbox.Width-5, 50); 


       rectangle.Border = 0; 

       PdfAnnotation bannerStamp = PdfAnnotation.CreateStamp(stamper.Writer, rectangle, null, "footer"); 


       bannerImage.SetAbsolutePosition(0, 0); 
       bannerImage.ScaleToFit(rectangle); 
       bannerImage.Alignment = Element.ALIGN_BOTTOM | Element.ALIGN_CENTER; 

       PdfContentByte cb = stamper.GetOverContent(1); 
       PdfAppearance app = cb.CreateAppearance(rectangle.Width, rectangle.Height); 
       app.AddImage(bannerImage); 
       bannerStamp.SetAppearance(PdfName.N, app); 
       bannerStamp.Flags = PdfAnnotation.FLAGS_PRINT; 
       stamper.AddAnnotation(bannerStamp, pageNum); 
       stamper.Close(); 

      } 

나는 그것이 사각형과 CreateAppearance 함께 할 수있는 뭔가의 확신은 (여기에 번호가 내 이미지의 크기),하지만 난 딱하다 무엇을 해결할 것인가.

편집 의견을 바탕으로 pdfAppearance의 크기가 동일한 직사각형을 사용하도록 코드를 업데이트했습니다. 그래도 내 질문은 계속됩니다.

사각형의 중앙에 배너 이미지를 정렬하려면 어떻게해야합니까?

+0

주석의 크기가 결정되지 않은 것으로 보입니다. 한편으로는 외형의 상수가 646x57이고 다른 한편으로는 직사각형에 (cropbox.Width' - 100) x50이 있습니다. 크기를 결정하고 그 크기를 일관되게 사용하는 이유는 무엇입니까? – mkl

답변

0

나는 그것을 해결했습니다! 정렬을 설정할 수 없으므로 절대 위치를 설정해야합니다. 지금 코드입니다.

PdfReader reader = new PdfReader(srcFile); 

     using (MemoryStream ms = new MemoryStream()) 
     { 
      using (PdfStamper stamper = new PdfStamper(reader, ms, '\0', true)) 
      { 
       var cropbox = reader.GetCropBox(1); 

       iTextSharp.text.Image bannerImage = iTextSharp.text.Image.GetInstance(bannerUrl); 
       var rectangle = new iTextSharp.text.Rectangle(5, 5, cropbox.Width-5, 50); 

       rectangle.Border = 0; 

       PdfAnnotation bannerStamp = PdfAnnotation.CreateStamp(stamper.Writer, rectangle, null, "footer"); 

       bannerImage.ScaleToFit(rectangle); 
       bannerImage.SetAbsolutePosition((cropbox.Width - bannerImage.ScaledWidth)/2, 0); //align it center 

       PdfContentByte cb = stamper.GetOverContent(1); 
       PdfAppearance app = cb.CreateAppearance(rectangle.Width, rectangle.Height); 
       app.AddImage(bannerImage); 
       bannerStamp.SetAppearance(PdfName.N, app); 
       bannerStamp.Flags = PdfAnnotation.FLAGS_PRINT; 
       stamper.AddAnnotation(bannerStamp, pageNum); 
       stamper.Close(); 

      } 
      return ms.ToArray(); 
     }