C# Pdf添加背景图片(iTextSharp)

发布时间 2023-05-05 15:24:56作者: 流纹
        /// <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设置图片大小效果如下,可以看出图片并没有明显的变形而是按照宽高比例放大了,但是也出现了背景覆盖不全面的情况

 

 

目前来说添加背景图的效果是实现了,但是背景图的大小设置上面还有缺陷,如果各位大佬有更好的办法,欢迎指点。