c# - itextsharp image scaletofit

时间:2016-09-02 12:30:03

标签: c# image pdf itext

我在缩放图片时遇到问题

这是我的问题。图像的红色边框不得与pdf页面的蓝色边框重叠

我使用的图像尺寸为173 * 292

enter image description here

这是我的代码

using (MemoryStream ms = new MemoryStream())
            {
                Document doc = new Document(PageSize.A4, 10, 10, 20, 35);
                PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(System.IO.Path.Combine(filepath, pdfLocation), FileMode.Create));
                doc.AddTitle("Document Title");

                doc.Open();

                iTextSharp.text.Image image1 = iTextSharp.text.Image.GetInstance(strFilename);
                image1.Alignment = iTextSharp.text.Image.ALIGN_CENTER;

                image1.Border = iTextSharp.text.Rectangle.BOX;
                image1.BorderWidth = 3.0f;
                image1.BorderColor = iTextSharp.text.BaseColor.RED;

                PdfContentByte content = writer.DirectContent;
                iTextSharp.text.Rectangle rectangle = new iTextSharp.text.Rectangle(doc.PageSize);
                rectangle.Left += doc.LeftMargin;
                rectangle.Right -= doc.RightMargin;
                rectangle.Top -= doc.TopMargin;
                rectangle.Bottom += doc.BottomMargin;
                content.SetColorStroke(iTextSharp.text.BaseColor.BLUE);
                content.Rectangle(rectangle.Left, rectangle.Bottom, rectangle.Width, rectangle.Height);
                content.Stroke();

                float pageWidth = doc.PageSize.Width - (35 + 35);
                float pageHeight = doc.PageSize.Height - (35 + 35);
                image1.ScaleToFit(pageWidth, pageHeight);

                image1.SetAbsolutePosition((PageSize.A4.Width - image1.ScaledWidth) / 2, (PageSize.A4.Height - image1.ScaledHeight) / 2);
                doc.Add(image1);
                doc.Close();

            }

我认为我的代码正常运行。

下面的屏幕截图是我使用的尺寸为3000 * 2363的图像,图像边框与pdf尺寸的边框不重叠

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为问题出现是因为不同的值用于margin top和bot。然而,之后不再观察到这些。实际上,您计算整个页面和图像之间的剩余空间,然后将图像开始一半。由此忽略边界。只要边框大小相同(如左+右),这就可以工作。由于缩放,图像变得很小,以至于间接地再次考虑边缘。

要确定正确的开始,必须遵守边距:

image1.SetAbsolutePosition((PageSize.A4.Width - image1.ScaledWidth) / 2, (PageSize.A4.Height - doc.BottomMargin - doc.TopMargin - image1.ScaledHeight) / 2 + doc.TopMargin);

这意味着确定蓝色矩形内的剩余空间。这个的一半+上面的边距。如果一个人也区分左右,那么必须以同样的方式补充这些。