zoukankan      html  css  js  c++  java
  • C#添加文字水印

    使用的是iTextSharp添加PDF水印,由于是接口动态生成PDF,所以采用的是全部是内存流的形式,而且水印是平铺是。iTextSharp版本是5.5

     1 /// <summary>
     2         /// 添加倾斜水印
     3         /// </summary>
     4         /// <param name="pdfStream">pdf文件流</param>
     5         /// <param name="waterMarkName">水印字符串</param>
     6         /// <param name="width">页面宽度</param>
     7         /// <param name="height">页面高度</param>
     8         public MemoryStream SetWaterMark(MemoryStream pdfStream, string waterMarkName, float width, float height)
     9         {
    10             try
    11             {
    12                 int fontSize = 50;//设置字体大小
    13                 int span = 40;//设置垂直位移
    14                 MemoryStream outStream = new MemoryStream();
    15                 PdfReader pdfReader = new PdfReader(pdfStream);
    16                 PdfStamper pdfStamper = new PdfStamper(pdfReader, outStream);
    17                 pdfStamper.Writer.CloseStream = false;
    18                 int total = pdfReader.NumberOfPages + 1;
    19                 PdfContentByte content;
    20                 BaseFont font = BaseFont.CreateFont(@"C:WINDOWSFontsSTCAIYUN.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//华文云彩字体
    21                 PdfGState gs = new PdfGState();
    22                 gs.FillOpacity = 0.15f;//透明度
    23                 int waterMarkNameLenth = waterMarkName.Length;
    24                 char c;
    25                 int rise = 0;
    26                 string spanString = " ";//水平位移
    27                 for (int i = 1; i < total; i++)
    28                 {
    29                     rise = waterMarkNameLenth * span;
    30                     content = pdfStamper.GetOverContent(i);//在内容上方加水印
    31                                                            //content = pdfStamper.GetUnderContent(i);//在内容下方加水印
    32                     content.SetGState(gs);
    33                     content.BeginText();
    34                     content.SetColorFill(BaseColor.GREEN);
    35                     content.SetFontAndSize(font, fontSize);
    36                     int heightNumbert = (int)Math.Ceiling((decimal)height / (decimal)rise);//垂直重复的次数,进一发
    37                     int panleWith = (fontSize + span) * waterMarkNameLenth;
    38                     int widthNumber = (int)Math.Ceiling((decimal)width / (decimal)panleWith);//水平重复次数
    39                    
    40                     // 设置水印文字字体倾斜 开始 
    41                     for (int w = 0; w < widthNumber; w++)
    42                     {
    43                         for (int h = 1; h <= heightNumbert; h++)
    44                         {
    45                             int yleng = rise * h;
    46                             content.SetTextMatrix(w * panleWith, yleng);//x,y设置水印开始的绝对左边,以左下角为x,y轴的起点
    47                             for (int k = 0; k < waterMarkNameLenth; k++)
    48                             {
    49                                 content.SetTextRise(yleng);//指定的y轴值处添加
    50                                 c = waterMarkName[k];
    51                                 content.ShowText(c + spanString);
    52                                 yleng -= span;
    53                             }
    54                         }
    55                     }
    56                     content.EndText();
    57                 }
    58                 if (pdfStamper != null)
    59                     pdfStamper.Close();
    60 
    61                 if (pdfReader != null)
    62                     pdfReader.Close();
    63 
    64                 return outStream;
    65             }
    66             catch (Exception ex)
    67             {
    68                 throw ex;
    69             }
    70         }
  • 相关阅读:
    移动app测试
    centos7中tomcat安装步骤
    linux下搭建数据库
    Linux 学习笔记
    vi编辑器 使用表
    python-Xml 实战
    python-Excel 实战
    手写HashMap
    volatile关键字解析
    两个栈实现队列——优化版
  • 原文地址:https://www.cnblogs.com/albertay/p/6600357.html
Copyright © 2011-2022 走看看