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

 更新时间:2020年12月8日 11:34  点击:1700

最近在做关于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

总结

到此这篇关于C#利用iTextSharp组件给PDF文档添加图片/文字水印的文章就介绍到这了,更多相关iTextSharp组件给PDF添加水印内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31
  • java 用itext设置pdf纸张大小操作

    这篇文章主要介绍了java 用itext设置pdf纸张大小操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31
  • vue中使用vue-pdf的方法详解

    这篇文章主要介绍了vue中使用vue-pdf的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-05
  • Qt 使用Poppler实现pdf阅读器的示例代码

    下面小编就为大家分享一篇Qt 使用Poppler实现pdf阅读器的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • 短视频(douyin)去水印工具的实现代码

    这篇文章主要介绍了市面上短视频(douyin)"去水印"的工具原来是这样实现的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-30
  • 浅谈实现在线预览PDF的几种解决办法

    这篇文章主要介绍了浅谈实现在线预览PDF的几种解决办法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-10
  • C#实现合并及拆分PDF文件的方法

    这篇文章主要为大家详细介绍了C#合并及拆分PDF文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C#将Word转换成PDF方法汇总(基于Office和WPS)

    这篇文章主要汇总了C#将Word转换成PDF方法,基于Office和WPS的两种解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C#实现的pdf生成图片文字水印类实例

    这篇文章主要介绍了C#实现的pdf生成图片文字水印类,结合完整实例形式分析了C#针对pdf文件的创建、添加文字、水印等相关操作技巧,需要的朋友可以参考下...2020-06-25
  • C#获取指定PDF文件页数的方法

    这篇文章主要介绍了C#获取指定PDF文件页数的方法,涉及C#操作pdf文件的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • C#合并多种格式文件为PDF的方法

    这篇文章主要为大家详细介绍了C#合并多种格式文件为PDF的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C#实现Word转为PDF的方法

    今天小编就为大家分享一篇关于C#实现Word转为PDF的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
  • Java读取PDF中的表格的方法示例

    本文主要介绍了Java读取PDF中的表格的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-22
  • php图片添加文字水印实现代码

    这篇文章主要为大家详细介绍了php图片添加文字水印实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-03-17
  • C# PDF Page操作设置页面切换按钮的方法

    这篇文章主要介绍了C# PDF Page操作设置页面切换按钮的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 红米K30至尊纪念版相机拍照怎么去水印?

    红米K30至尊纪念版相机拍照怎么去水印?红米K30至尊纪念版拍照的时候总是自动添加水印,想要关闭水印,该怎么操作呢?下面我们就来看看详细的教程,需要的朋友可以参考下...2020-12-08
  • C#将jpg转换为pdf的方法

    这篇文章主要介绍了C#将jpg转换为pdf的方法,主要通过itextsharp.dll文件实现,是非常实用的技巧,需要的朋友可以参考下...2020-06-25
  • python操作mysql、excel、pdf的示例

    这篇文章主要介绍了python操作mysql、excel、pdf的示例,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-03-29
  • C#将Excel转成PDF的方法

    今天小编就为大家分享一篇关于C#将Excel转成PDF的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
  • 用C#来解析PDF文件

    这篇文章主要介绍了用C#来解析PDF文件,同时作者也介绍了PdfFileAnalyzer这个应用可以作为很好的成品示例,需要的朋友可以参考下...2020-06-25