zoukankan      html  css  js  c++  java
  • iTextSharp简单生成pdf和操作pdf添加水印

    遇到需要导出页面到pdf,并添加pdf水印的业务。稍微研究了下,借阅网友的前车之鉴,经过使用可行之后的代码贴出来,做个记录,也供需要的网友借阅。

    public class PDFSetWaterMark
        {
            /// <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();
                    }
                }
    
            }
    
            /// <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:WINDOWSFontsSIMFANG.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:WINDOWSFontsSIMFANG.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 = "E://3.pdf";
                    HtmlToPDFUtil.HtmlToPdf(Request.Url.AbsoluteUri, path);
                    //HtmlToPDFUtil.HtmlToPdf(sbUrlList.ToString(), path);
                    PDFSetWaterMark.PDFWatermark(path, "E://3-1.pdf", Server.MapPath("/HtmlToPdf/Tools/sy.bmp"), 0, 0);
                    PDFSetWaterMark.setWatermark("E://3-1.pdf", "E://3-2.pdf", "ssss");
                    //PDFSetWaterMark.setWatermark("E://3-2.pdf", "E://3-3.pdf", "sssss", "", "", 1);
      /// <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, string waterMarkName, float top, float left)
            {
                PdfReader pdfReader = null;
                PdfStamper pdfStamper = null;
                try
                {
                    pdfReader = new PdfReader(inputfilepath);
                    pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));
                    int numberOfPages = pdfReader.NumberOfPages;
                    Rectangle psize = pdfReader.GetPageSize(1);
                    float width = psize.Width;
                    float height = psize.Height;
    
                    //添加普通偏转角度文字水印
                    PdfContentByte content;
                    BaseFont font = BaseFont.CreateFont(@"C:WINDOWSFontsSIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                    PdfGState gs = new PdfGState();
                    for (int i = 1; i < numberOfPages; i++)
                    {
                        //content = pdfStamper.GetOverContent(i);//在内容上方加水印
                        content = pdfStamper.GetUnderContent(i);//在内容下方加水印
                        //透明度
                        gs.FillOpacity = 0.5f;
                        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.EndText();
                    }
    
                    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();
                }
            }
    PDFSetWaterMark.PDFWatermark("E://TestDemo//ConsoleApplication3//ConsoleApplication2//pdf//Test3.pdf", "E://TestDemo//ConsoleApplication3//ConsoleApplication2//pdf//Test2.pdf", "E://TestDemo//ConsoleApplication3//ConsoleApplication2//images//2016072909231.gif", "测试水印水印", 200, 430);
  • 相关阅读:
    DNS原理总结及其解析过程详解
    linux修改进程名
    mq_open失败,Invalid argument
    Posix消息队列
    undefined reference to 'mq_open'
    量化投资学习笔记08——统计学基础补漏
    量化投资学习笔记07——python知识补漏
    量化投资学习笔记06——《打开量化投资的黑箱》读书笔记
    量化投资学习笔记05——检验计算回测指标程序
    量化投资学习笔记04——回测实盘策略
  • 原文地址:https://www.cnblogs.com/sunxuchu/p/5716737.html
Copyright © 2011-2022 走看看