C#利用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;
  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添加水印内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#使用iTextSharp添加PDF水印

    使用的是iTextSharp添加PDF水印,由于是接口动态生成PDF,所以采用的是全部是内存流的形式,而且水印是平铺是.iTextSharp版本是5.5. /// <summary> /// 添加倾斜水印 /// </summary> /// <param name="pdfStream">pdf文件流</param> /// <param name="waterMarkName">水印字符串</pa

  • C#利用iTextSharp添加PDF水印

    本文实例为大家分享了使用的是iTextSharp添加PDF水印的具体代码,供大家参考,具体内容如下 需要iTextSharp.dll, 下载地址http://sourceforge.net/projects/itextsharp/ public void Test() { Watermark(@"E:\日常工作\12084347 config.pdf", @"E:\日常工作\12084347 config wm.pdf", @"E:\日常工作\wm.png

  • C#利用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; 创建一个显示

  • 利用C#如何给PDF文档添加文本与图片页眉

    前言 下面这篇文章向大家分享如何使用了免费组件Free Spire.PDF给PDF文档添加文本和图片页眉.这个组件提供了一些方法,可以帮助我们快速方便地实现此目的. 添加页眉步骤: 首先,创建一个Visual C#控制台项目,添加组件引用并使用以下命名空间. using System; using System.Drawing; using Spire.Pdf; using Spire.Pdf.Graphics; 在下列代码中,我们先定义一个SetDocumentTemplate()方法来创建一

  • 使用C#给PDF文档添加注释的实现代码

    整理文档时,我们可能会需要在一些或一段文字上添加注释加以说明,那如何以编程的方式实现呢?本文将实例讲述C#中如何使用免费组件给PDF文档添加文本注释,包括自由文本注释.自由文本注释能允许我们自定义它的风格和外观,非常具有实用价值. 首先,下载这个免费版组件Free Spire.PDF.组件下载安装后,Visual Studio创建C#控制台项目,添加bin文件夹的.DLL作为引用以及以下命名空间: using System; using System.Drawing; using System.

  • Python利用PyPDF2快速拆分PDF文档

    目录 安装PyPDF2模块 创建文件,准备PDF文档 万事俱备,准备开拆 文档的拆分思路 python拆分计算公式: 具体怎么拆? 完整拆分程序: 列表拆分法实现拆分PDF 写在最后 "人生苦短,快学Python",因为这句口号,我也加入了学习Python的浩浩大军,但由于Python真的是可以做的事情太多了,一时迷了眼,不知道自己应该去专攻哪个方向. 经过多方向试探,我还是选择了广而不深的web开发,Python的web开发自然离不开大名鼎鼎的Django,有一次突发奇想,下载了Dj

  • Python3实现网页内容转换成PDF文档和图片

    目录 1.引言 2.代码实战 2.1 模块介绍 2.2 安装 2.3 代码实例 2.4 拓展 3.总结 1.引言 小鱼:小屌丝,你这是干啥呢? 小屌丝:我的女神想要这个网页的内容. 小鱼:那你也不能这一点点的复制粘贴啊, 小屌丝:为了我的女神,再辛苦我都愿意… 小鱼:咱能不能man一点,你直接把网页内容爬下来不就完事了, 小屌丝:我的女神还要把这些内容转换成PDF, 小鱼:你的女神事可真多… 小屌丝:鱼哥,你有什么好的法子吗? 小鱼:嗯,办法嘛,确实有 小屌丝:我懂. 小鱼:…上道这么快,果然为

  • C#实现给PDF文档设置过期时间

    目录 引入dll程序集 添加过期时间 实现代码 C# VB.NET 效果图 我们可以给一些重要文档或者临时文件设置过期时间和过期信息提示来提醒读者或管理者文档的时效性,并及时对文档进行调整.更新等.下面,分享通过C#程序代码来给PDF文档设置过期时间的方法. 引入dll程序集 [方法1]通过 NuGet 安装. 可以在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”,然后搜索“Free Spire.PDF”,点击“安装”. 也可以将以下内容复制到

  • 利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用freemarker这样的模板引擎这样的方式.php中也有一些相应的方法,但在python中将web/html内容生成world文档的方法是很少的.其中最不好解决的就是如何将使用js代码异步获取填充的数据,图片导出到word文档中. 1. unoconv 功能: 1.支持将本地html文档转换为docx

  • C#使用iTextSharp从PDF文档获取内容的方法

    本文实例讲述了C#使用iTextSharp从PDF文档获取内容的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using iTex

  • Java中Aspose组件进行多文档间的转换方法总结

    什么是Aspose? Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案,主要提供.net跟java两个开发语言的控件套包,通过它,我们可以有计划地操纵一些商业中最流行的文件格式:Word, Excel, PowerPoint, Project,等office文档以及PDF文档. 除了强大的文件操纵组件之外,Aspose.Total 还提供了用于制图.写电子邮件.拼写检查.创建条形码.生成ad hoc 查询.重现格式以及工作流等组件,运用它我们可以整理一个完整的文

  • 用PHP编写PDF文档生成器

    PHP一个最大的优点就是它对新技术的支持非常容易,这种语言的可扩展性使得开发人员能够很方便地添加新的模块,而且遍布世界的技术团体的支持和众多扩展模块的支持使得PHP已经成为功能最齐全的Web编程语言之  一.目前可得到的扩展模块已经能够使开发人员执行IMAP和POP3操作,可以动态产生图象和Shockwave Flash动画,进行信用卡验证,敏感数据的加密解密,还能够解析XML格式的数据.但这还不是全部,现在,又有一个新的模块可以与PHP进行绑定了,那就是PDFLib扩展模块,它能够让开发人员动

随机推荐