C#利用iTextSharp組件給PDF文檔添加圖片/文字水印
最近在做關(guān)于PDF文檔添加水印的功能,折騰了好久,終于好了。以下做個(gè)記錄:
首先會(huì)用到iTextSharp組件,大家可以去官網(wǎng)下載,同時(shí)我也會(huì)在本文中附加進(jìn)來(lái)。
代碼中添加引用為:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using iTextSharp.text.pdf; using System.IO; using iTextSharp.text;
創(chuàng)建一個(gè)顯示指定圖片的pdf
/// <summary> /// 創(chuàng)建一個(gè)顯示指定圖片的pdf /// </summary> /// <param name="picPdfPath"></param> /// <param name="picPath"></param> /// <returns></returns> public static bool CreatePDFByPic(string picPdfPath,string picPath) { //新建一個(gè)文檔 Document doc = new Document(); try { //建立一個(gè)書寫器(Writer)與document對(duì)象關(guān)聯(lián) PdfWriter.GetInstance(doc, new FileStream(picPdfPath, FileMode.Create, FileAccess.ReadWrite)); //打開一個(gè)文檔 doc.Open(); //向文檔中添加內(nèi)容 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//旋轉(zhuǎn) //image.RotationDegrees//旋轉(zhuǎn)角度 //水印的位置 if (left < 0) { left = width/2 - image.Width + left; } //image.SetAbsolutePosition(left, (height - image.Height) - top); image.SetAbsolutePosition(left, (height/2 - image.Height) - top); //每一頁(yè)加水印,也可以設(shè)置某一頁(yè)加水印 for (int i = 1; i <= numberOfPages; i++) { //waterMarkContent = pdfStamper.GetUnderContent(i);//內(nèi)容下層加水印 waterMarkContent = pdfStamper.GetOverContent(i);//內(nèi)容上層加水印 waterMarkContent.AddImage(image); } //strMsg = "success"; return true; } catch (Exception ex) { throw ex; } finally { if (pdfStamper != null) pdfStamper.Close(); if (pdfReader != null) pdfReader.Close(); } }
添加普通偏轉(zhuǎn)角度文字水印
/// <summary> /// 添加普通偏轉(zhuǎn)角度文字水印 /// </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);//在內(nèi)容上方加水印 //content = pdfStamper.GetUnderContent(i);//在內(nè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)); // 設(shè)置密碼 //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);//在內(nèi)容上方加水印 //content = pdfStamper.GetUnderContent(i);//在內(nèi)容下方加水印 content.BeginText(); content.SetColorFill(BaseColor.DARK_GRAY); content.SetFontAndSize(font, 50); // 設(shè)置水印文字字體傾斜 開始 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; } } // 字體設(shè)置結(jié)束 content.EndText(); // 畫一個(gè)圓 //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(); } }
調(diào)用方法的例子:
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
總結(jié)
到此這篇關(guān)于C#利用iTextSharp組件給PDF文檔添加圖片/文字水印的文章就介紹到這了,更多相關(guān)iTextSharp組件給PDF添加水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C# 網(wǎng)絡(luò)編程系列:實(shí)現(xiàn)類似QQ的即時(shí)通信程序
本篇主要介紹了c#實(shí)現(xiàn)類似QQ的即時(shí)通信程序 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12深入理解C#實(shí)現(xiàn)快捷鍵(系統(tǒng)熱鍵)響應(yīng)的方法
本篇文章是對(duì)使用C#實(shí)現(xiàn)快捷鍵(系統(tǒng)熱鍵)響應(yīng)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#創(chuàng)建安全的棧(Stack)存儲(chǔ)結(jié)構(gòu)
這篇文章主要為大家詳細(xì)介紹了C#創(chuàng)建安全的棧(Stack)存儲(chǔ)結(jié)構(gòu)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10基于c#用Socket做一個(gè)局域網(wǎng)聊天工具
目前基于Internet的即時(shí)聊天工具已經(jīng)做的非常完美,本文介紹了基于c#用Socket做一個(gè)局域網(wǎng)聊天工具,有需要的朋友可以看一下。2016-10-10C# 獲取指定QQ頭像繪制圓形頭像框GDI(Graphics)的方法
某論壇的評(píng)論區(qū)模塊,發(fā)現(xiàn)這功能很不錯(cuò),琢磨了一晚上做了大致一樣的,用來(lái)當(dāng)做 注冊(cè)模塊 的頭像綁定功能,下面通過實(shí)例代碼給大家介紹下C# 獲取指定QQ頭像繪制圓形頭像框GDI(Graphics)的方法,感興趣的朋友一起看看吧2021-11-11C#基礎(chǔ)語(yǔ)法:Base關(guān)鍵字學(xué)習(xí)筆記
這篇文章主要介紹了C#基礎(chǔ)語(yǔ)法:Base關(guān)鍵字學(xué)習(xí)筆記,本文講解了它的一些基礎(chǔ)知識(shí)以及測(cè)試代碼,需要的朋友可以參考下2015-06-06