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

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

代码中添加引用为:
 
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq; usingSystem.Text; usingiTextSharp.text.pdf; usingSystem.IO; usingiTextSharp.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:\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);

转载于:https://www.cnblogs.com/hausthy/p/4146123.html

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

  1. 使用免费组件给PDF文档添加文本和图片页眉

    C#/.NET 使用免费组件给PDF文档添加文本和图片页眉 如今PDF文档与Office文档一样成为了一种通用文档,在日常工作中我们经常会碰到需要给PDF文件添加页眉和页脚/页码等情况,如果你正好是喜 ...

  2. java 多文字水印_Java 如何给Word文档添加多行文字水印

    前言html 我在以往的文章中曾介绍过如何给Word文档添加文本水印和图片水印,及怎样删除文档中的水印.关于文本水印,以前那篇教程里主要指的是单行字体的水印,而在操做Word文档时,有时也会碰到须要添 ...

  3. java怎么给文档加水印_Java 如何给Word文档添加多行文字水印

    前言 我在以往的文章中曾介绍过如何给Word文档添加文本水印和图片水印,及怎样删除文档中的水印.关于文本水印,之前那篇教程里主要指的是单行字体的水印,而在操作Word文档时,有时也会碰到需要添加多行文 ...

  4. 使用IText组件在PDF文档上绘制椭圆形印章的算法分析及代码分享

    1. 引言 PDF是一种和操作系统及平台无关的.可移植的电子文件格式,其以PostScript语言图像模型为基础,无论在哪种打印机上,都可保证精确的颜色和准确的打印效果.PDF将真实地再现原稿的每一个 ...

  5. pdf文档添加书签的三种方式

    本文总结了三种pdf文档添加书签的方式. 1 搜出书签用PdgCntEditor创建书签方式 方法原地址:https://zhuanlan.zhihu.com/p/170590863 1.1 在全国图 ...

  6. C# 如何给现有/新建PDF文档添加注释或标注

    这篇文章主要介绍如何使用免费版PDF组件Free Spire.PDF及C#编程语言给现有PDF文档或新建的PDF文档中的文本添加注释或标注(完整代码附在文章末尾). 首先,下载 Free Spire. ...

  7. elementui表格添加滚动条_如何给PDF文档添加超链接?

    有时我们在编辑PDF文档时,需要给目录做快速跳转或给文中的某些内容跳转到其他网页,这就需要用到超链接的功能.下面就一起看看给PDF文档添加超链接的是如何操作的. https://www.zhihu.c ...

  8. pdf常用字体包 -baijiahao_如何给PDF文档添加和插入页码?

    如今PDF格式因其比常用的office格式更稳定,被越来越多人使用,但也正因为近几年才慢慢广泛使用,对于其编辑的相关操作也相对陌生,那么如何给PDF文档添加页码呢?如果不喜欢从第一页就开始编码,如何直 ...

  9. 使用PDF编辑器为PDF文档添加页码教程

    在日常工作中编辑PDF文档时,必然会遇到需要给PDF文档添加页码的情况.那么如何给PDF文档添加页码呢?需要借助什么软件才能完成呢? 今天就教大家轻松为PDF文档添加页码. PDF编辑器https:/ ...

最新文章

  1. matlab篮球队需要五名队员,MATLAB应用与数学欣赏.doc
  2. node oracle linux 安装,Linux 下 nodejs 使用官方oracledb库连接数据库 教程
  3. SpringMVC Controller单例和多例
  4. matlab常用工具箱的调用指令
  5. java 非法线程_JVM中的线程行为
  6. seq2seq模型_用 CNN 实现 Seq2Seq 模型
  7. 跑赢业务的同时如何实现技术成长? | 凌云时刻
  8. FreeRTOS学习记录(安富莱FreeRTOS教程摘录)
  9. 系统查看PSD缩略图
  10. python爬虫框架教程_python爬虫框架有哪些
  11. 普通人最应该具备的素质是什么,韧性
  12. 无线宽带接入802.16技术简介(转)
  13. vue学习Day08
  14. 林光常颠覆传统的养生观 ,养生必读
  15. 如何让BERT拥有视觉感知能力?两种方式将视频信息注入BERT
  16. 微信小程序把玩(三十)wx.request(object) API
  17. 2019-详细Android Studio开发百度地图(4)—百度地图_路线规划的实现
  18. pako java_基于pako.js实现gzip的压缩和解压功能示例
  19. 解决java前台传递时间到后台相差8个小时的时区问题
  20. 比抄袭还要无耻的行为是什么?

热门文章

  1. fscokopen 中执行超时 使用stream_set_timeout设置超时
  2. Javascript--闭包引起的IE内存泄露(转载)
  3. Linux之crontab命令
  4. 深入理解JVM虚拟机-Ubuntu中安装openJDK
  5. 2018-03-07 Linux学习
  6. HttpClient 解释
  7. 移动端web页面自适应和rem
  8. 技术人生:不要忘记过去,也不要想着过去,向前看
  9. 转载:word排版之长英文单词自动换行
  10. 匈牙利命名法、骆驼命名法、帕斯卡(pascal)命名法 C#命名规范