利用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
利用iTextSharp组件给PDF文档添加图片水印,文字水印的更多相关文章
- Java 如何给Word文档添加多行文字水印
前言 我在以往的文章中曾介绍过如何给Word文档添加文本水印和图片水印,及怎样删除文档中的水印.关于文本水印,之前那篇教程里主要指的是单行字体的水印,而在操作Word文档时,有时也会碰到需要添加多行文 ...
- C#如何给PDF文档添加注释
整理文档时,我们可能会需要在一些或一段文字上添加注释加以说明,那如何以编程的方式实现呢?本文将实例讲述C#中如何使用免费组件给PDF文档添加文本注释,包括自由文本注释.自由文本注释能允许我们自定义它的 ...
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- 利用Java动态生成 PDF 文档
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
- C# 给现有PDF文档添加页眉、页脚
概述 页眉页脚是一篇完整.精致的文档的重要组成部分.在页眉页脚处,可以呈现的内容很多,如公司名称.页码.工作表名.日期.图片,如LOGO.标记等.在之前的文章中介绍了如何通过新建一页空白PDF页来添加 ...
- 如何给PDF文档添加和删除贝茨编号
PDF文件的使用频率高了,我们也不只局限于使用PDF文件了,也会需要编辑PDF文件的时候,那么如何在PDF文件中添加和去除贝茨编号呢,应该有很多小伙伴都想知道吧,今天就来跟大家分享一下吧,小伙伴们就一 ...
- ABBYY FineReader 15 如何为PDF文档添加页眉页脚
页眉.页脚是文档页面顶部或底部重复出现的文本信息.很多用户会习惯在文档页面的顶部与底部区域添加页眉.页脚来展现页码.文档标题.作者姓名.品牌名称等附加信息.而ABBYY FineReader 15(W ...
- PDF文档转换为图片、图片转成PDF 及PDF合并
简介 功能:PDF文档按每页转换成一张图片,一张图片转换成一张PDF 并将多张PDF合成一个多页的PDF文档. 经历:在各个网站上搜索始终出现各种问题,尤其是遇到引用的版本问题尤其头疼,不是不能适用当 ...
- icepdf和pdfbox转pdf文档为图片
icepdf转pdf文档为图片 首先导入icepdf jar包或maven pdfPath为pdf文件路径.pdfimgpsth为图片保存的路径 public static void icePdfIm ...
随机推荐
- 算法题:给你一个自然数N,求[6, N]之内的全部素数中, 两两之和为偶数的那些偶数。
/* 算法题:给你一个自然数N,求[6, N]之内的全部素数中. 两两之和为偶数的那些偶数. */ #include <iostream> using namespace std; voi ...
- vue -- 跨域cookie 丢失的问题
前端使用了vue-reource的$http进行请求后台接口 登陆完成后,服务端监控发现无法拿到cookie,下面看几张前端控制台监控的图 reqqust Header 没有显示cookie 信息 ...
- 洛谷P3531 [POI2012]LIT-Letters
题目描述 Little Johnny has a very long surname. Yet he is not the only such person in his milieu. As it ...
- Kinect 开发 —— 手势识别(下)
基本手势追踪 手部追踪在技术上和手势识别不同,但是它和手势识别中用到的一些基本方法是一样的.在开发一个具体的手势控件之前,我们先建立一个可重用的追踪手部运动的类库以方便我们后续开发.这个手部追踪类库包 ...
- Oracle新建表字段,如何使字段自增
oracle的自增需要依靠序列和触发器共同实现 比如 新建一张表 create table test (id int primary key, name varchar2(10)); 创建一个序列 ...
- Python day3 知识回顾
names = ["Jonathen","Joesph","Jotaro","Josuke",["Mea&qu ...
- Linux搭建aspx.net环境之:CentOs 7 安装 Mono 和 Jexus 步骤记录
1 因为163没有CentOs7的镜像.所以没有加这个 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo cd /etc/yum.rep ...
- js中对数组的操作-------Day49
今天碰到了一个问题:easyui的使用中,datagrid表格的高度怎样改变(设定成一个固定的高度),看了半天文档,也从网上查了些.还楞是没弄出来,有点小郁闷.这easyui在某些情况情况下确实好用了 ...
- Linux网络编程--字节序
1 .谈到字节序,那么会有朋友问什么是字节序 非常easy:[比如一个16位的整数.由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序 ...
- php excel文件导出之phpExcel扩展库
php Excel 文件导出 phpExcel 官网 http://phpexcel.codeplex.com/ /** * 导出特定文件 * 依据详细情况而定 */ public function ...