最近在做关于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 CreatePDFByPicstring picPdfPath,string picPath) { //新建一个文档 Document doc = new Document); try { //建立一个书写器Writer)与document对象关联 PdfWriter.GetInstancedoc, new FileStreampicPdfPath, FileMode.Create, FileAccess.ReadWrite)); //打开一个文档 doc.Open); //向文档中添加内容 Image img = Image.GetInstancepicPath); //img.SetAbsolutePosition); doc.Addimg); 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 PDFWatermarkstring inputfilepath, string outputfilepath, string ModelPicName, float top, float left) { //throw new NotImplementedException); PdfReader pdfReader = null; PdfStamper pdfStamper = null; try { pdfReader = new PdfReaderinputfilepath); int numberOfPages = pdfReader.NumberOfPages; iTextSharp.text.Rectangle psize = pdfReader.GetPageSize1); float width = psize.Width; float height = psize.Height; pdfStamper = new PdfStamperpdfReader, new FileStreamoutputfilepath, FileMode.Create)); PdfContentByte waterMarkContent; iTextSharp.text.Image image = iTextSharp.text.Image.GetInstanceModelPicName); image.GrayFill = 20;//透明度,灰色填充 //image.Rotation//旋转 //image.RotationDegrees//旋转角度 //水印的位置 if left < 0) { left = width/2 - image.Width + left; } //image.SetAbsolutePositionleft, height - image.Height) - top); image.SetAbsolutePositionleft, height/2 - image.Height) - top); //每一页加水印,也可以设置某一页加水印 for int i = 1; i <= numberOfPages; i++) { //waterMarkContent = pdfStamper.GetUnderContenti);//内容下层加水印 waterMarkContent = pdfStamper.GetOverContenti);//内容上层加水印 waterMarkContent.AddImageimage); } //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 setWatermarkstring inputfilepath, string outputfilepath,string waterMarkName) { PdfReader pdfReader = null; PdfStamper pdfStamper = null;
//获取所用权 PdfReader.unethicalreading = true; try { pdfReader = new PdfReaderinputfilepath); pdfStamper = new PdfStamperpdfReader, new FileStreamoutputfilepath, FileMode.Create)); int total = pdfReader.NumberOfPages + 1; iTextSharp.text.Rectangle psize = pdfReader.GetPageSize1); float width = psize.Width; float height = psize.Height; PdfContentByte content; BaseFont font = BaseFont.CreateFont@"C:WINDOWSFontsSIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); PdfGState gs = new PdfGState); for int i = 1; i < total; i++) { content = pdfStamper.GetOverContenti);//在内容上方加水印 //content = pdfStamper.GetUnderContenti);//在内容下方加水印 //透明度 gs.FillOpacity = 0.3f; content.SetGStategs); //content.SetGrayFill0.3f); //开始写入文本 content.BeginText); content.SetColorFillBaseColor.LIGHT_GRAY); content.SetFontAndSizefont, 100); content.SetTextMatrix0, 0); content.ShowTextAlignedElement.ALIGN_CENTER, waterMarkName, width / 2 - 50,height / 2 - 50, 55); //content.SetColorFillBaseColor.BLACK); //content.SetFontAndSizefont, 8); //content.ShowTextAlignedElement.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 setWatermarkstring inputfilepath, string outputfilepath, string waterMarkName, string userPassWord, string ownerPassWord, int permission) { PdfReader pdfReader = null; PdfStamper pdfStamper = null; try { pdfReader = new PdfReaderinputfilepath); pdfStamper = new PdfStamperpdfReader, new FileStreamoutputfilepath, FileMode.Create)); // 设置密码 //pdfStamper.SetEncryptionfalse,userPassWord, ownerPassWord, permission); int total = pdfReader.NumberOfPages + 1; PdfContentByte content; BaseFont font = BaseFont.CreateFont@"C:WINDOWSFontsSIMFANG.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.GetOverContenti);//在内容上方加水印 //content = pdfStamper.GetUnderContenti);//在内容下方加水印 content.BeginText); content.SetColorFillBaseColor.DARK_GRAY); content.SetFontAndSizefont, 50); // 设置水印文字字体倾斜 开始 if j >= 15) { content.SetTextMatrix200, 120); for int k = 0; k < j; k++) { content.SetTextRiserise); c = waterMarkName[k]; content.ShowTextc + ""); rise -= 20; } } else { content.SetTextMatrix180, 100); for int k = 0; k < j; k++) { content.SetTextRiserise); c = waterMarkName[k]; content.ShowTextc + ""); rise -= 18; } } // 字体设置结束 content.EndText); // 画一个圆 //content.Ellipse250, 450, 350, 550); //content.SetLineWidth1f); //content.Stroke); } } catch Exception ex) { throw ex; } finally { if pdfStamper != null) pdfStamper.Close); if pdfReader != null) pdfReader.Close); } }
调用方法的例子:
string path = "D://my.pdf"; HtmlToPDFUtil.HtmlToPdfRequest.Url.AbsoluteUri, path); //HtmlToPDFUtil.HtmlToPdfsbUrlList.ToString), path); PDFSetWaterMark.PDFWatermarkpath, "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);