首页 > 代码库 > PDF打水印加密

PDF打水印加密

技术分享
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Diagnostics;
  5 using System.IO;
  6 using System.Linq;
  7 using System.Web;
  8 using iTextSharp.text;
  9 using iTextSharp.text.pdf;
 10 using iTextSharp.text.html;
 11 using iTextSharp.text.xml;
 12 using System.Configuration;
 13 
 14 namespace WorkFlow
 15 {
 16     public class ReportHelper
 17     {
 18         public static string  ConvertToPDF(string content)
 19         {
 20             string s = string.Empty;
 21             string sPwd = string.Empty;
 22             StringReader sr = new StringReader(content);
 23             //定义一个Document,并设置页面大小为A4,竖向
 24             Document document = new Document(PageSize.A4);
 25             string sMapPath = HttpContext.Current.Server.MapPath(GetWebMailKeyValue()) + @"\";
 26             string sFileName = "Report" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
 27 
 28             try
 29             {
 30                 DirectoryInfo info = new DirectoryInfo(sMapPath);
 31                 if (!info.Exists)
 32                 {
 33                     info.Create();
 34                 }
 35                 PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(sMapPath + sFileName, FileMode.Create));
 36                 #region 载入亚洲字体资源,无此操作的话,不能显示包括中文、日文、韩文等内容
 37                 BaseFont.AddToResourceSearch("iTextAsian.dll");
 38                 BaseFont.AddToResourceSearch("iTextAsianCmaps.dll");
 39                 BaseFont bf = BaseFont.CreateFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
 40                 #endregion
 41 
 42 
 43                 //生成水印
 44                 writer.PageEvent = new PdfEventHanler("@JTSJMZT", bf);
 45 
 46                 //处理密码
 47                 if (string.IsNullOrEmpty(sPwd))
 48                 {
 49                     Random r = new Random();
 50                     sPwd = r.Next(0, 99999999).ToString();
 51                 }
 52                 //将密码存入数据库
 53                 //sPwd
 54 
 55                 //加密
 56                 writer.SetEncryption(PdfWriter.STRENGTH128BITS, sPwd, null, PdfWriter.AllowPrinting);
 57 
 58 
 59                 //打开document
 60                 document.Open();
 61 
 62                 //写入一个段落, Paragraph
 63                 //List<IElement> htmlarraylist = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, null).ToArray().ToList<IElement>();
 64 
 65                 //for (int k = 0; k < htmlarraylist.Count; k++)
 66                 //    document.Add(htmlarraylist[k]);
 67                
 68                 //Paragraph mypara = new Paragraph();
 69                 //document.Add(mypara);
 70 
 71                 document.Add(new Paragraph(content, new Font(bf, 12)));
 72 
 73                 //关闭document
 74                 document.Close();
 75 
 76                 s = sFileName;
 77                 //打开PDF,看效果
 78                 //Process.Start(s);
 79 
 80                 //Blob Storage
 81                 //var location = AppDomain.CurrentDomain.BaseDirectory;
 82                 //uploadPath = location + "/";
 83                 //doc.Save(uploadPath + sFileName);
 84                 //BlobClient.AddBlob(DANCode1Config.EmailFileContainer, "MailExportAttachment1/" + sFileName, uploadPath, sFileName);
 85 
 86                 //uploadPath = GetWebMailURL() + "MailExportAttachment1/" + sFileName;
 87 
 88                 //s = "{\"message\":true,\"value\":\"" + s + "\"}";
 89             }
 90             catch (Exception ex)
 91             {
 92                 s= ex.Message;
 93             }
 94             return s;
 95         }
 96 
 97         public static string GetWebMailURL()
 98         {
 99             string s = ConfigurationManager.AppSettings["MailBlobStorage"].ToString();
100             return s;
101         }
102 
103         public static string GetWebMailKeyValue()
104         {
105             string s = ConfigurationManager.AppSettings["PDFExport"].ToString();
106             return s;
107         }
108     }
109 
110     internal class PdfEventHanler : PdfPageEventHelper
111     {
112         string m_WatermaskText;
113         BaseFont m_WatermaskTextFont;
114 
115         /// <summary>
116         ///
117         /// </summary>
118         /// <param name="watermaskText">水印文字的内容</param>
119         /// <param name="watermaskTextFont">水印文字的字体</param>
120         public PdfEventHanler(string watermaskText,
121      BaseFont watermaskTextFont)
122         {
123             m_WatermaskText = watermaskText;
124             m_WatermaskTextFont = watermaskTextFont;
125         }
126 
127         /// <summary>
128         /// 在Page End事件中,添加页面水印,此事件在每页均会发生
129         /// </summary>
130         /// <param name="writer"></param>
131         /// <param name="document"></param>
132         public override void OnEndPage(PdfWriter writer,
133     Document document)
134         {
135             PdfGState gstate = new PdfGState();
136             gstate.FillOpacity = 0.2f; //设置灰度和透明度
137             gstate.StrokeOpacity = 0.2f;
138 
139             //水印内容,必须放置在底层
140             PdfContentByte wm = writer.DirectContentUnder;
141             wm.SaveState();
142             wm.SetGState(gstate);
143 
144             #region 给页面添加文字水印
145             wm.SetFontAndSize(m_WatermaskTextFont, 50);
146             wm.BeginText();
147             wm.ShowTextAligned(Element.ALIGN_CENTER, m_WatermaskText,
148     document.PageSize.Width / 2, document.PageSize.Height / 2, -35f);
149             wm.EndText();
150             #endregion
151 
152             wm.RestoreState();
153 
154             base.OnEndPage(writer, document);
155         }
156     }
157 }
View Code

 

PDF打水印加密