首页 > 代码库 > 利用iTextSharp组件给PDF文档添加图片水印,文字水印

利用iTextSharp组件给PDF文档添加图片水印,文字水印

最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了。以下做个记录:

首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来。

代码中添加引用为:
 
using System;using System.Collections.Generic;using System.Linq;using System.Text;using iTextSharp.text.pdf;using System.IO;using iTextSharp.text;

 
创建一个显示指定图片的pdf
/// <summary>        /// 创建一个显示指定图片的pdf        /// </summary>        /// <param name="picPdfPath"></param>        /// <param name="picPath"></param>        /// <returns></returns>        public static bool CreatePDFByPic(string picPdfPath,string picPath)        {            //新建一个文档            Document doc = new Document();            try            {                //建立一个书写器(Writer)与document对象关联                PdfWriter.GetInstance(doc, new FileStream(picPdfPath, FileMode.Create, FileAccess.ReadWrite));                //打开一个文档                doc.Open();                //向文档中添加内容                Image img = Image.GetInstance(picPath);                //img.SetAbsolutePosition();                doc.Add(img);                return true;            }            catch (Exception ex)            {                return false;                throw ex;            }            finally            {                if (doc != null)                {                    doc.Close();                }            }        }
 为PDF文档添加图片水印
/// <summary>        /// 加图片水印        /// </summary>        /// <param name="inputfilepath"></param>        /// <param name="outputfilepath"></param>        /// <param name="ModelPicName"></param>        /// <param name="top"></param>        /// <param name="left"></param>        /// <returns></returns>        public static bool PDFWatermark(string inputfilepath, string outputfilepath, string ModelPicName, float top, float left)        {            //throw new NotImplementedException();            PdfReader pdfReader = null;            PdfStamper pdfStamper = null;            try            {                pdfReader = new PdfReader(inputfilepath);                int numberOfPages = pdfReader.NumberOfPages;                iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);                float width = psize.Width;                float height = psize.Height;                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));                PdfContentByte waterMarkContent;                iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(ModelPicName);                image.GrayFill = 20;//透明度,灰色填充                //image.Rotation//旋转                //image.RotationDegrees//旋转角度                //水印的位置                 if (left < 0)                {                    left = width/2 - image.Width + left;                }                //image.SetAbsolutePosition(left, (height - image.Height) - top);                image.SetAbsolutePosition(left, (height/2 - image.Height) - top);                //每一页加水印,也可以设置某一页加水印                 for (int i = 1; i <= numberOfPages; i++)                {                    //waterMarkContent = pdfStamper.GetUnderContent(i);//内容下层加水印                    waterMarkContent = pdfStamper.GetOverContent(i);//内容上层加水印                    waterMarkContent.AddImage(image);                }                //strMsg = "success";                return true;            }            catch (Exception ex)            {                throw ex;                            }            finally            {                if (pdfStamper != null)                    pdfStamper.Close();                if (pdfReader != null)                    pdfReader.Close();            }        }
 添加普通偏转角度文字水印 
/// <summary>        /// 添加普通偏转角度文字水印        /// </summary>        /// <param name="inputfilepath"></param>        /// <param name="outputfilepath"></param>        /// <param name="waterMarkName"></param>        /// <param name="permission"></param>        public static void setWatermark(string inputfilepath, string outputfilepath,string waterMarkName)        {            PdfReader pdfReader = null;            PdfStamper pdfStamper = null;            try            {                pdfReader = new PdfReader(inputfilepath);                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));                int total = pdfReader.NumberOfPages + 1;                iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);                float width = psize.Width;                float height = psize.Height;                PdfContentByte content;                BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);                PdfGState gs = new PdfGState();                for (int i = 1; i < total; i++)                 {                    content = pdfStamper.GetOverContent(i);//在内容上方加水印                    //content = pdfStamper.GetUnderContent(i);//在内容下方加水印                    //透明度                    gs.FillOpacity = 0.3f;                    content.SetGState(gs);                    //content.SetGrayFill(0.3f);                    //开始写入文本                    content.BeginText();                    content.SetColorFill(BaseColor.LIGHT_GRAY);                    content.SetFontAndSize(font, 100);                    content.SetTextMatrix(0, 0);                    content.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, width / 2 - 50,height / 2 - 50, 55);                    //content.SetColorFill(BaseColor.BLACK);                    //content.SetFontAndSize(font, 8);                    //content.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, 0, 0, 0);                    content.EndText();                }            }catch (Exception ex)            {                throw ex;            }            finally            {                if (pdfStamper != null)                    pdfStamper.Close();                if (pdfReader != null)                    pdfReader.Close();            }        }

 

 添加倾斜水印

/// <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;//透明度                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.BeginText();                    content.SetColorFill(BaseColor.DARK_GRAY);                    content.SetFontAndSize(font, 50);                    // 设置水印文字字体倾斜 开始                     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(180, 100);                        for (int k = 0; k < j; k++)                        {                            content.SetTextRise(rise);                            c = waterMarkName[k];                            content.ShowText(c + "");                            rise -= 18;                        }                    }                    // 字体设置结束                     content.EndText();                    // 画一个圆                     //content.Ellipse(250, 450, 350, 550);                    //content.SetLineWidth(1f);                    //content.Stroke();                 }             }            catch (Exception ex)            {                throw ex;            }            finally            {                if (pdfStamper != null)                    pdfStamper.Close();                if (pdfReader != null)                    pdfReader.Close();            }        }
 调用方法的例子: 
 string path = "D://my.pdf";                HtmlToPDFUtil.HtmlToPdf(Request.Url.AbsoluteUri, path);                //HtmlToPDFUtil.HtmlToPdf(sbUrlList.ToString(), path);                PDFSetWaterMark.PDFWatermark(path, "D://my.pdf", Server.MapPath("/HtmlToPdf/Tools/sy.bmp"), 0, 0);                PDFSetWaterMark.setWatermark("D://my.pdf", "D://my2.pdf", "TEST");                //PDFSetWaterMark.setWatermark("D://my.pdf", "D://my2.pdf", "TEST", "", "", 1);

 

 附件:iTextSharp