pdf增加水印

/// <summary>
        /// 为PDF添加水印或背景图片
        /// </summary>
        /// <param name="strSourceFilePath">源文件路径</param>
        /// <param name="strTargetFilePath">目标文件路径</param>
        /// <param name="strWaterMarkPicPath">水印图片路径</param>
        /// <param name="strTargetFileTmpPath">目标临时文件</param>
        /// <returns>添加结果</returns>
        public static bool AddWaterMarkForPdf(string strSourceFilePath, string strTargetFilePath, string strWaterMarkPicPath, FileInfo TargetFileTmp)
        {
            bool blnRt = false;
            PdfFileInfo pdf = new PdfFileInfo(strSourceFilePath);
            if (! pdf.BePdfFile)
            {
                throw  new ApplicationException("源文件不是有效的PDF文件");
            }
            //开始处理
            int intPageNums = pdf.NumberofPages;

            PdfFileStamp fileStamp = null;
            try
            {
                int intNumber = 650;
                int intCount = (int)Math.Ceiling(intPageNums / (decimal.Parse(intNumber.ToString())));
                for (int j = 0; j < intCount; j++)
                {
                    fileStamp = new PdfFileStamp(strSourceFilePath, strTargetFilePath);
                    for (int i = 1; i <= intNumber; i++)
                    {
                        if (j * intNumber + i > intPageNums)
                        {
                            break;
                        }
                        Stamp stamp = new Stamp();
                        if (!String.IsNullOrEmpty(strWaterMarkPicPath))
                        {
                            stamp.BindImage(strWaterMarkPicPath);
                        }
                        stamp.IsBackground = true;
                        stamp.PageNumber = j * intNumber + i;
                        stamp.SetImageSize(PageSize.A4.Height, PageSize.A4.Width);
                        fileStamp.AddStamp(stamp);
                    }
                    fileStamp.Close();
                    TargetFileTmp.Delete();
                    File.Copy(strTargetFilePath, TargetFileTmp.FullName);
                    strSourceFilePath = TargetFileTmp.FullName;
                }
                blnRt = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return blnRt;
        }
具体代码

 注意,给PDF增加水晶报表,当页码过多时会报错,或卡死。为了防止这种情况,我们要分多次对PDF进行增加水印。

如第一次加600页,保存关闭当前文件,再拿加过水印的文件进行再追加水印,这样这就不会了错了。

原文地址:https://www.cnblogs.com/xbding/p/4601588.html