zoukankan      html  css  js  c++  java
  • 利用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;
    //获取所用权 PdfReader.unethicalreading = true; 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 = "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);
    
  • 相关阅读:
    [比赛|考试]9.21上午考试
    给花_Q
    [比赛|考试] 9.17下午考试
    [比赛|考试]nowcoder NOIP提高组组第二场
    图论
    生成函数
    P4197 Peaks
    3942: [Usaco2015 Feb]Censoring
    P2245 星际导航
    P3565 [POI2014]HOT-Hotels
  • 原文地址:https://www.cnblogs.com/hausthy/p/4146123.html
Copyright © 2011-2022 走看看