c#itextsharp在每一页上创建水印PDF文件方式创建一些在每一页上带有水印的PDF文档。使用PdfStamper创建文档后,我能够做到这一点。但是,这似乎涉及重新打开从中读取它的文档,然后创建一个在每一页上都带有水印的新文档。有没有办法在文档创建过程中做到这一点?干杯,蒂姆。深入研究后,我发现最好的方法是在创建每个页面时为其添加水印。为此,我创建了一个新类并实现了IPdfPageEvent接口,如下所示:classPdfWriterEvents:IPdfPageEvent{stringwatermarkText=string.Empty;公共PdfWriterEvents(字符串水印){watermarkText=水印;}publicvoidOnOpenDocument(PdfWriterwriter,Documentdocument){}publicvoidOnCloseDocument(PdfWriterwriter,Documentdocument){}publicvoidOnStartPage(PdfWriterwriter,Documentdocument){floatfontSize=80;浮动xPosition=300;浮动yPosition=400;浮动角度=45;尝试{PdfContentByteunder=writer.DirectContentUnder;BaseFontbaseFont=BaseFont.CreateFont(BaseFont.HELVETICA,BaseFont.WINANSI,BaseFont.EMBEDDED);under.BeginText();under.SetColorFill(BaseColor.LIGHT_GRAY);under.SetFontAndSize(baseFont,fontSize);under.ShowTextAligned(PdfContentByte.ALIGN_CENTER,watermarkText,xPosition,yPosition,angle);under.EndText();}catch(Exceptionex){Console.Error.WriteLine(ex.Message);}}publicvoidOnEndPage(PdfWriterwriter,Documentdocument){}publicvoidOnParagraph(PdfWriterwriter,Documentdocument,floatparagraphPosition){}publicvoidOnParagraphEnd(PdfWriterwriter,Documentdocument,floatparagraphPosition){}publicvoidOnChapter(PdfWriterwriter,Documentdocument,documentatparagraph){}publicvoidOnChapterEnd(PdfWriterwriter,Documentdocument,floatparagraphPosition){}publicvoidOnSection(PdfWriterwriter,Documentdocument,floatparagraphPosition,intdepth,Paragraphtitle){}publicvoidOnSectionEnd(PdfWriterparacutos,Documentfloatwriter){}publicvoidOnGenericTag(PdfWriterwriter,Documentdocument,Rectanglerect,Stringtext){}}}注册这个对象来处理事件如下:PdfWriterdocWriter=PdfWriter.GetInstance(document,newFileStream(outputLocation,FileMode.Create));PdfWriterEventswriterEvent=newPdfWriterEvents(水印);docWriter.PageEvent=writerEvent;虽然Tim的解决方案看起来非常好,但我设法使用以下代码(我相信)做了同样的事情(也许是iTextSharp从那时起有了改进...):privatebyte[]AddWatermark(byte[]bytes,BaseFontbf){using(varms=newMemoryStream(10*1024)){using(varreader=newPdfReader(bytes))使用(varstamper=newPdfStamper(reader,ms)){inttimes=reader.NumberOfPages;for(inti=1;i这将在作为字节数组提供的PDF文档的所有页面上添加水印(创建PDF时不需要这样做。)它似乎在横向和纵向上都有效,并且它可能适用于混合方向的文档。干杯!?字符串WatermarkLocation="D:\Images\superseded.png";Documentdocument=newDocument();PdfReaderpdfReader=newPdfReader(FileLocation);PdfStamperstamp=newPdfStamper(pdfReader,newFileStream(FileLocation.Replace(".pdf","[temp][file].pdf"),FileMode.Create));iTextSharp.text.Imageimg=iTextSharp.text.Image.GetInstance(WatermarkLocation);img.SetAbsolutePosition(125,300);//设置水印在文档中出现的位置(0,0=页面左下角)PdfContentBytewaterMark;for(intpage=1;page我用的是第一个解决方案。起初我无法让它工作。在我所有的公共漏洞下,我得到绿色下划线,表示它将隐藏一些继承成员。基本上我意识到我已经添加了一个PagePageEventHelper并且我基本上只是删除了OnStartPage的代码。还!出于某种原因,我不得不使所有publicvoid的public覆盖无效。publicoverridevoidOnStartPage(PdfWriterwriter,Documentdocument){if(condition){stringwatermarkText="-whateveryouwantyouwantyourwatermarksay-";浮动字体大小=80;浮动xPosition=300;浮动yPosition=400;浮动角度=45;尝试{PdfContentByteunder=writer.DirectContentUnder;BaseFontbaseFont=BaseFont.CreateFont(BaseFont.HELVETICA,BaseFont.WINANSI,BaseFont.EMBEDDED);under.BeginText();under.SetColorFill(iTextSharp.text.pdf.CMYKColor.LIGHT_GRAY);under.SetFontAndSize(baseFont,fontSize);under.ShowTextAligned(PdfContentByte.ALIGN_CENTER,watermarkText,xPosition,yPosition,angle);under.EndText();}catch(Exceptionex){Console.Error.WriteLine(ex.Message);完成后,你不能在每个页面上加一个水印吗?是的,水印类似乎不再那么奇怪了。但在过渡到iTextSharp5.3的过程中,我发现了一种向新文档添加水印的简单方法。内存流mem=new内存流();文件文件=新文件();PdfWriterwriter=PdfWriter.GetInstance(document,mem);PdfContentBytecb=writer.DirectContent;文档.Open();文档.NewPage();图片水印=Image.GetInstance(WATERMARK_URI);水印.SetAbsolutePosition(80,200);文档。添加(水印);BaseFontbf=BaseFont.CreateFont(FONT,BaseFont.CP1252,BaseFont.NOT_EMBEDDED);cb.BeginText();...cb.EndText();文档.Close();在iTextSharp中,你应该可以通过编程方式添加水印,例如上面是C#学习教程:c#itextsharpcreatesPDFfileswithwatermarksoneachpagetosharethewholecontent,如果对你有用,你需要了解更多关于C#学习教程,希望大家多多关注---Watermarkwatermark=newWatermark(Image.getInstance("watermark.jpg"),200,420);文件.添加(水印);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
