您的位置:首页 > 编程语言 > C#

PDF之itextsharp的使用开发历程2

2015-08-07 13:59 465 查看
1、上一篇已经初步介绍并引入了itext 的PDF(.Net)操作类库itextsharp,话不多说,先show一下使用itextsharp类库写的winform功能界面,该版主要实现:加密、加权限、加水印、加属性,不懂UI设计,不懂PS,大家多担待



2、功能描述,此版集三大功能于一身,主要实现对单一的现有PDF文档的二次处理,先来说说加密及权限的部分,PDF的加密比较讲究,出于对PDF档版权的考虑,Adobe为PDF赋予了两种密码,一种叫Userpassword(用户密码,可以叫阅读限制密码,当我们使用Adobe打开一个采用这种密码加密的文档时,你需要输入一个密码,而输入的密码既可以是Userpassword也可以使Ownerpassword,输入密码正确后方可看到里面的内容,所以叫阅读限制密码),接下来是Ownerpassword,心细的朋友会发现有的PDF文档虽然可以直接打开进行阅读,但是在文档标题会有“(已加密)”的字样,其实这类文档便是文档著作者出于版权考虑为PDF文档加了权限限制密码了,所以才会显示为“已加密”的状态,那这样的文档究竟会差在哪里呢,心细的朋友又会发现,这类文档有的内容被限制了打印,有的被限制了复制,有的被限制了提取内容等等,更有的完全就把常用的功能都限制掉了,所以你别想要通过这些方法去提取别人文档中的内容,即便你复制该文档的副本,所以限制或者密码依然会存在,唯有通过PDF的相关操作功能来对限制进行清除,但是如果你的文档被Userpassword限制了,那么你必须拥有这个阅读密码(或者限制密码)才可以通过工具软件进行去除,不然就只能采用暴力破解的方式了。

3、接下来则是添加PDF文档属性,PDF文档的属性可以包含哪些呢,请看下图,文档中的这五项可以根据著作者信息进行写入:



4、最后便是添加水印的功能,这个功能经常会被用到,出于版权的原因,PDF文档经常会被打上公司网址、logo或者一些特征性的图片作为文档的水印以示版权,同时水印也可以作为一种外部链接,点击后可以直接链接到特定网站

5、最后附上主要的功能函数及部分源码,大家可以参考一下,不喜勿喷

加密函数:    public virtual void SetEncryption(int encryptionType, string userPassword, string ownerPassword, int permissions);

属性功能代码:

                        Dictionary<String, String> info = reader.Info;

                        info["Title"] = Title_txt;

                        info["Author"] = Author_txt;

                        info["Subject"] = Subject_txt;

                        info["Keywords"] = Keywords_txt;

                        info["Creator"] = Creator_txt;

                        stamper.MoreInfo = info;

文本水印功能代码:

                           //Create a new layer新建水印层

                            PdfLayer layer = new PdfLayer("WatermarkLayer", stamper.Writer);   

                            for (int i = 1; i <= pagecount; i++)   //根据页数循环添加

                            {

                                iTextSharp.text.Rectangle rect = reader.GetPageSize(i);    //获取当前页尺寸计算水印添加位置

                                local_X = Getlocal_tX(rect.Width, wmText.Length);

                                local_Y = Getlocal_tY(rect.Height, wmText.Length);

                                //Get the ContentByte object                                

                                PdfContentByte cb = stamper.GetOverContent(i);     //设置水印显示方式

                                //Tell the CB that the next commands should be "bound" to this new layer

                                cb.BeginLayer(layer);

                                cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED), 50);  //设置字体和字体大小

                                PdfGState gState = new PdfGState();

                                gState.FillOpacity = opacity * 0.01f;     //设置水印透明度

                                cb.SetGState(gState);

                                cb.SetColorFill(Fontcolor);   //设置水印文本颜色

                                cb.BeginText();

                                cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, wmText, local_X, local_Y, angle * 1f);   //设置水印位置及角度

                                cb.EndText();

                                //"Close" the layer

                                cb.EndLayer();

                            }

6、itextsharp现在最新版本为:itextsharp-all-5.5.6(更新于2015.5.7),有兴趣的朋友可以到这里进行下载:http://sourceforge.net/projects/itextsharp/,在这里你也可以找到很多问题的解决方案,当然你也可以在这里寻找到很多相关的答案:http://stackoverflow.com/questions/tagged/itext;你还可以直接登录itext的官网寻求更多帮助:http://itextpdf.com/,这几个网站都是我开发过程中经常会逛的地方,在这里面总能找到你想要的答案。







后续的开发及使用历程会在下一篇博文展开,更多PDF操作项目实例及软件可以跟大家探讨、分享,有兴趣的朋友可以继续跟进,有需要itextsharp开发的API说明档(只有Java版本,基本比较通用)也可以来找我哦,也可以随时跟我交流,邮箱:hjacto@163.com;   QQ: 3045918815  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# PDF 加密 水印 解密