微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#中pdf生成图片文字水印类的实现实例

这篇文章主要介绍了C#实现的pdf生成图片文字水印类,结合完整实例形式分析了C#针对pdf文件的创建、添加文字、水印等相关操作技巧,需要的朋友可以参考下

本文实例讲述了C#实现的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:\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();
      }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐