iTextSharp Image.ScaleToFit自适应缩放简述

参考文章地址:itextsharp和图像大小 - 码客 (oomake.com)

 

国内提问文章:itextsharp和图像大小 - 码客 (oomake.com)

国外参考文章:scaling images in iTextSharp

 

如果想要完全相同的尺寸,那么应该使用ScaleAbsolute而不是ScaleToFit。后者保持图像的纵横比,因此缩放到50x50的100x200图像将为25x50。

// 传入PDF纸张大小
img.ScaleAbsolute(120f, 155.25f);

 

 

 

// 实战案例

string imgPath = pdfPath;
string imgPDFPath = imgPath + ".pdf";
iTextSharp.text.Document Doc
= new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate(), 10, 10, 10, 10); PdfWriter writer = PdfWriter.GetInstance(Doc, new FileStream(imgPDFPath, FileMode.Create, FileAccess.Write, System.IO.FileShare.Read)); Doc.Open(); Doc.NewPage(); #region 图片自适应 Rectangle defaultPageSize = iTextSharp.text.PageSize.A4.Rotate(); float pageWidth = defaultPageSize.Width - Doc.RightMargin - Doc.LeftMargin; float pageHeight = defaultPageSize.Height - Doc.TopMargin - Doc.BottomMargin; iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(new Uri(new FileInfo(imgPath).FullName)); // 图片宽、高任意超过图纸大小(需要缩放,ScaleToFit方法自适应缩放后可以保持图片的纵横比例,且以长边为主) if (image.ScaledWidth >= pageWidth || image.ScaledHeight >= pageHeight) {   image.ScaleToFit(pageWidth, pageHeight); } // 水平、垂直居中(由于此处的绝对位置是以图片的“左下角”为主,所以这里的Y值要使用加法增加数值,10为Doc的边距) image.SetAbsolutePosition((pageWidth - image.ScaledWidth) / 2 + 10, (pageHeight - image.ScaledHeight) / 2 + 10); #endregion Doc.Add(image); Doc.Close(); pdfPath = imgPDFPath;

 

posted @ 2021-08-05 10:41  最好的年纪  阅读(2937)  评论(0编辑  收藏  举报