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:\WINDOWS\Fonts\STCAIYUN.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         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM