zoukankan      html  css  js  c++  java
  • 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页,保存关闭当前文件,再拿加过水印的文件进行再追加水印,这样这就不会了错了。

  • 相关阅读:
    以证书的方式登录ssh
    JSPatch在MAC下的使用
    sqlite3使用备忘
    iOS模拟器录屏转gif神器
    UINavigationController + UIScrollView组合,视图尺寸的设置探秘(三)
    UINavigationController + UIScrollView组合,视图尺寸的设置探秘(二)
    UINavigationController + UIScrollView组合,视图尺寸的设置探秘(一)
    内容可循环重用的ScrollView
    关于Logger
    Git入门操作
  • 原文地址:https://www.cnblogs.com/xbding/p/4601588.html
Copyright © 2011-2022 走看看