C# WPF PDF导出水印添加

需要添加引用iTextSharp.dll,具体的添加方式可以通过nuget添加,不做赘述。

public static bool ExportRange2CSV(IEnumerable dataSource, DataGrid grid, string fileName)
        {
            try
            {
                PdfPTable table1 = new PdfPTable(16);
                table1.TotalWidth = 820;
                table1.LockedWidth = true;//锁定宽度

                //int[] a = { 0, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };          //设置列宽比例
                float[] a = { 0, 33, 36, 130, 100, 100, 27, 50, 36, 50, 50, 50, 25, 50, 25, 50 };          //设置列宽比例
                table1.SetWidths(a);
                string str = Export2Text(dataSource, ",", grid.Columns.ToArray());
                //File.WriteAllText(fileName, str, encoding);
                string[] strArray = str.Split(',');
                foreach (string s in strArray)
                {
                   // table1.AddCell(s);     //添加单元格
                }

                //字体定义
                var bfchinese = BaseFont.CreateFont(@"c:\windows\fonts\simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//simkai.ttf
                var ChFont_12 = new Font(bfchinese, 12);
                var ChFont_10 = new Font(bfchinese, 10);
                var ChFont_8 = new Font(bfchinese, 8);
                var ChFont_12_red = new Font(bfchinese, 12, iTextSharp.text.Font.ITALIC, BaseColor.RED);

                int coordinate = 1;
                foreach (string str2 in strArray)
                {
                    PdfPCell cell = new PdfPCell(new Phrase(str2, ChFont_10));
                    cell.HorizontalAlignment = 1;       //居中输入 默认 0:居左 1:居中 
                    if(coordinate>17) cell.HorizontalAlignment = 0;
                    table1.AddCell(cell);     //添加单元格
                    coordinate++;
                }
                

                //定义一个Document,并设置页面大小为A4,竖向 
                Document doc = new Document(PageSize.A4.Rotate());
                try
                {
                    //写实例 
                    PdfWriter.GetInstance(doc, new FileStream("C:\\Windows\\cache.pdf", FileMode.Create));
                    #region 设置PDF的头信息,一些属性设置,在Document.Open 之前完成
                    doc.AddAuthor("Mr J");
                    doc.AddCreationDate();
                    doc.AddCreator("HYBIOME");
                    doc.AddSubject("本文件解释权在医院");
                    doc.AddTitle("结果导出文件");
                    doc.AddKeywords("HYBIOME");
                    //自定义头 
                    doc.AddHeader("Expires", "0");                      
                    #endregion //打开document
                    doc.Open();
                    //载入字体 
                    //BaseFont.AddToResourceSearch("iTextAsian.dll");
                    //BaseFont.AddToResourceSearch("iTextAsianCmaps.dll");
                    //"UniGB-UCS2-H" "UniGB-UCS2-V"是简体中文,分别表示横向字 和 // 纵向字 //" STSong-Light"是字体名称 
                    BaseFont baseFT = BaseFont.CreateFont(@"c:\windows\fonts\SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                    Font font = new Font(baseFT); //写入一个段落, Paragraph 
                    doc.Add(table1);

                    //font.Size = 15;
                    //doc.Add(new Paragraph(str, font));
                    
                    //关闭document 
                    doc.Close();

                    SetWatermark("C:\\Windows\\cache.pdf", fileName, "HYBIOME", "", "", 123456);

                    //打开PDF,看效果 
                    Process.Start(fileName);
                }
                catch (DocumentException de) { Console.WriteLine(de.Message); Console.ReadKey(); }
                catch (IOException io) { Console.WriteLine(io.Message); Console.ReadKey(); }


            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        /// <summary>
        /// 添加倾斜水印
        /// </summary>
        /// <param name="inputfilepath"></param>
        /// <param name="outputfilepath"></param>
        /// <param name="waterMarkName"></param>
        /// <param name="userPassWord"></param>
        /// <param name="ownerPassWord"></param>
        /// <param name="permission"></param>
        public static void SetWatermark(string inputfilepath, string outputfilepath, string waterMarkName, string userPassWord, string ownerPassWord, int permission)
        {
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;
            try
            {
                pdfReader = new PdfReader(inputfilepath);
                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));
                // 设置密码  
                //pdfStamper.SetEncryption(false,userPassWord, ownerPassWord, permission);

                int total = pdfReader.NumberOfPages + 1;
                PdfContentByte content;
                BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                PdfGState gs = new PdfGState();
                gs.FillOpacity = 0.2f;//透明度

                //waterMarkName = waterMarkName + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                int j = waterMarkName.Length;
                char c;
                int rise = 0;
                for (int i = 1; i < total; i++)
                {                    
                    rise = 500;
                    //content = pdfStamper.GetOverContent(i);//在内容上方加水印
                    content = pdfStamper.GetUnderContent(i);//在内容下方加水印

                    content.SetGState(gs);
                    content.BeginText();
                    content.SetColorFill(BaseColor.DARK_GRAY);
                    content.SetFontAndSize(font, 100);
                    // 设置水印文字字体倾斜 开始
                    if (j >= 15)
                    {
                        content.SetTextMatrix(200, 120);
                        for (int k = 0; k < j; k++)
                        {
                            content.SetTextRise(rise);
                            c = waterMarkName[k];
                            content.ShowText(c + "");
                            rise -= 20;
                        }
                    }
                    else
                    {
                        content.SetTextMatrix(220, -200);
                        for (int k = 0; k < j; k++)
                        {
                            content.SetTextRise(rise);
                            c = waterMarkName[k];
                            content.ShowText(c + "");
                            //rise -= 18;                            
                        }

                        content.SetFontAndSize(font, 20);
                        content.SetTextMatrix(250, -250);
                        string dateTimeStr= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                        for (int k=0;k<dateTimeStr.Length;k++)
                        {
                            content.SetTextRise(rise);
                            c = dateTimeStr[k];
                            content.ShowText(c + "");
                        }
                    }
                    // 字体设置结束
                    content.EndText();
                    ////画一个圆
                    ////content.Ellipse(250, 450, 350, 550);
                    //content.Ellipse(260, 260, 480, 360);
                    //content.SetLineWidth(3f);
                    ////content.SetGState(gs);//试图使其透明 但无效 姜彦20181021 1702
                    //content.Stroke();
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

                if (pdfStamper != null)
                    pdfStamper.Close();

                if (pdfReader != null)
                    pdfReader.Close();
            }
        }

 

转载于:https://www.cnblogs.com/jiangyan219/articles/9881062.html

wpf编程宝典c#2010版pdf(全)上传限制分3包,共118M。本人已检查,全三十三章。918页。 作 者:(美)麦克唐纳,王德才 译 出版社: 清华大学出版 英文名:Pro WPF IN C#2010 Windows Pressentation Foundation in .NET4 本书在亚马逊网站上深受读者好评.由微软公司的最有价值专家Matthew MacDonald倾力而作,凝聚了Matthew多年来积累的丰富实践经验,是目前最全面 的一本介绍WPF编程技术的书籍。书中不仅全面介绍了常见的图形界面编程技术,而且对WPF中非常有特色的文档和打印、音频和视频、动画、3D图形开发、多线程和插件等内容也进行了比较深入的介绍。 第1章 WPF概述   1.1 Windows图形演化   1.1.1 DirectX:新的图形引擎   1.1.2 硬件加速与WPF   1.2 WPF:高级API   1.2.1 Windows窗体将继续保留   1.2.2 DirectX也将继续保留   1.2.3 Silverlight   1.3 分辨率无关性   1.3.1 WPF单位   1.3.2 系统DPI   1.3.3 位图和矢量图形   1.4 WPF体系结构   1.5 WPF4   1.5.1 新特性   1.5.2 WPF工具包   1.5.3 VisualStudio2010   1.6 小结   第2章 XAML   2.1 理解XAML   2.1.1 WPF之前的图形用户界面   2.1.2 XAML变体   2.1.3 XAML编译   2.2 XAML基础   2.2.1 XAML名称空间   2.2.2 代码隐藏类   2.3 XAML中的属性和事件   2.3.1 简单属性与类型转换器   2.3.2 复杂属性   2.3.3 标记扩展   2.3.4 附加属性   2.3.5 嵌套元素   2.3.6 特殊字符与空白   2.3.7 事件   2.3.8 完整的EightBall示例   2.4 使用其他名称空间中的类型   2.5 加载和编译XAML   2.5.1 只使用代码   2.5.2 使用代码和未经编译的XAML   2.5.3 使用代码和编译过的XAML   2.5.4 只使用XAML   2.6 XAML2009   2.6.1 自动事件连接   2.6.2 引用   2.6.3 内置类型   2.6.4 高级的对象创建   2.7 小结   第3章 布局   3.1 理解WPF中的布局   3.1.1 WPF布局原则   3.1.2 布局过程   3.1.3 布局容器   3.2 使用StaCkPanel面板进行简单布局   3.2.1 布局属性   3.2.2 对齐方式   3.2.3 边距   3.2.4 最小尺寸、最大尺寸以及显式地设置尺寸   3.2.5 Border控件   3.3 wrapPanel面板和DockPanel面板   3.3.1 wrapPanel面板   3.3.2 DockPanel面板   ……   第4章 依赖项属性   第5章 路由事件   第6章 控件   第7章 application类   第8章 元素绑定   第9章 命令   第10章 资源   第11章 样式和行为   第12章 形状、画刷和变换   第13章 几何图形和图画   第14章 效果和可视比对象   第15章 动画基础   第16章 高级动画   第17章 控件模板   第18章 自定义元素   第19章 数据绑定   第20章 格式化绑定的数据   第21章 数据视图   第22章 列表、网格和树   第23章 窗口   第24章 页面和导航   第25章 菜单、工具栏和功能区   第26章 声音和视频   第27章 3d绘图   第28章 文档   第29章 打印   第30章 与windows窗体的交互   第31章 多线程   第32章 插件模型   第33章 clickonce部署
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值