ItextSharp在pdfstamped矩形内对齐图像

时间:2017-03-15 11:41:34

标签: c# pdf itext

我正在尝试使用pdfstamper将横幅图片添加到现有pdf页面的底部。 我有它显示但我无法弄清楚如何让它对齐中心。

我的代码如下:

  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大小相同。我的问题仍然存在 -

如何将横幅图像与矩形对齐?

1 个答案:

答案 0 :(得分: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();
        }