C# Pdf添加背景图片(iTextSharp)
/// <summary> /// Pdf添加背景图片 /// </summary> /// <param name="pdfPath">pdf文件路径</param> /// <param name="outPath">输出pdf文件路径</param> /// <param name="imagePath">图片文件路径</param> public static void PdfAddBackGroud(string pdfPath, string outPath, string imagePath) { //读取pdf iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfPath); //创建新pdf System.IO.Stream outStream = new System.IO.FileStream(outPath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None); //读取pdf文件数据流 iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, outStream); //读取图片文件 System.Drawing.Image image = System.Drawing.Image.FromFile(imagePath); //获取图片实例 iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Png); //图片设置为A4纸大小,会出现变形现象 img.ScaleAbsolute(iTextSharp.text.PageSize.A4); //设置图片宽高,不会明细的变形,但是这个是按宽高比例设置图片缩放的,可能会出现背景覆盖不全的情况 //img.ScaleToFit(iTextSharp.text.PageSize.A4); //设置透明度 //{red起始值, red终止值, green起始值, green终止值, blue起始值, blue终止值};范围为0~255 img.Transparency = new int[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; //设置图片的位置,从左下角开始算 img.SetAbsolutePosition(0, 0); int totalPageNum = reader.NumberOfPages; for (int i = 1; i <= totalPageNum; i++) { //图片添加于内容下层也必须在下层,放上层的话会直接将整个内容全部挡住 stamper.GetUnderContent(i).AddImage(img); } stamper.Close(); reader.Close(); System.Diagnostics.Process.Start(outPath); }
通过img.ScaleAbsolute设置图片大小效果如下,可以看出背景虽然已经全覆盖了,但是图片内容出现了明显的变形现象
通过img.ScaleToFit设置图片大小效果如下,可以看出图片并没有明显的变形而是按照宽高比例放大了,但是也出现了背景覆盖不全面的情况
目前来说添加背景图的效果是实现了,但是背景图的大小设置上面还有缺陷,如果各位大佬有更好的办法,欢迎指点。
本文来自博客园,作者:流纹,转载请注明原文链接:https://www.cnblogs.com/lwk9527/p/17374246.html