/// <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设置图片大小效果如下,可以看出图片并没有明显的变形而是按照宽高比例放大了,但是也出现了背景覆盖不全面的情况
目前来说添加背景图的效果是实现了,但是背景图的大小设置上面还有缺陷,如果各位大佬有更好的办法,欢迎大佬们指点。
仅个人记录