pdf - Itextsharp PdfDocument or PdfDocument from It.Document -
i adding page numbers bottom of pdf document using itextsharp thing is, made of 4 or 5 different pdf's combined through process, , there dynamically added pages pdf can vary in size. cannot call document.pagecount because "lacks accessor".
i made counter keep track of page on, , can final page "page 9 of 9" rest "page 7 of ". thinking run whole document through pdfreader call reader.numberofpages , rerun each page , add final number @ bottom not know how make 1 type itextsharp.text.document, nor how go afterwards.
this project started else, , i've barely touched itextsharp before, cannot remake class because huge.
does know can do? or how go adding 1 number each page of itextsharp.text.document?
found guys :d
so whenever make writer:
using (memorystream ms = new memorystream()) { pdfwriter writer = pdfwriter.getinstance(doc, ms); writer.viewerpreferences = pdfwriter.pagemodeuseoutlines; pdffooter eventhandler = new pdffooter(); writer.pageevent = eventhandler; ect. } for pdffooter:
using system; using system.collections.generic; using system.linq; using system.web; using itextsharp.text.pdf; using itextsharp.text; public class pdffooter : pdfpageeventhelper { // contentbyte object of writer pdfcontentbyte cb; // put final number of pages in template pdftemplate template; // basefont going use header / footer basefont bf = null; // keeps track of creation time datetime printtime = datetime.now; #region properties private string _title; public string title { { return _title; } set { _title = value; } } private string _headerleft; public string headerleft { { return _headerleft; } set { _headerleft = value; } } private string _headerright; public string headerright { { return _headerright; } set { _headerright = value; } } private font _headerfont; public font headerfont { { return _headerfont; } set { _headerfont = value; } } private font _footerfont; public font footerfont { { return _footerfont; } set { _footerfont = value; } } #endregion // override onopendocument method public override void onopendocument(pdfwriter writer, document document) { try { printtime = datetime.now; bf = basefont.createfont(basefont.helvetica, basefont.cp1252, basefont.not_embedded); cb = writer.directcontent; template = cb.createtemplate(50, 50); } catch (documentexception de) { } catch (system.io.ioexception ioe) { } } public override void onendpage(pdfwriter writer, document document) { base.onendpage(writer, document); int pagen = writer.pagenumber; string text = "page " + pagen + " of "; float len = bf.getwidthpoint(text, 8); rectangle pagesize = document.pagesize; cb.setrgbcolorfill(100, 100, 100); cb.begintext(); cb.setfontandsize(bf, 8); cb.settextmatrix(pagesize.getright(70), pagesize.getbottom(15)); cb.showtext(text); cb.endtext(); cb.addtemplate(template, pagesize.getright(70) + len, pagesize.getbottom(15)); } public override void onclosedocument(pdfwriter writer, document document) { base.onclosedocument(writer, document); template.begintext(); template.setfontandsize(bf, 8); template.settextmatrix(0, 0); template.showtext("" + (writer.pagenumber - 1)); template.endtext(); } }
hope helps in future :)
Comments
Post a Comment