pdf - How to make PdfLayer.SetPrint work with PdfStamper? -
pdf - How to make PdfLayer.SetPrint work with PdfStamper? -
i'm adding watermarks on existing pdf using itext pdfstamper
class. , want these watermarks switched on or off, i'm using class pdflayer
. want these watermarks visible when file printed : i'm using function pdflayer.setprint()
then. this lastly step unfortunately doesn't work expected.
here's code :
pdfreader reader = new pdfreader("c:/temp/input.pdf"); pdfstamper stamp = new pdfstamper(reader, new fileoutputstream("c:/temp/output.pdf")); pdfwriter author = stamp.getwriter(); pdflayer layer = new pdflayer("watermarks", writer); layer.seton(true); layer.setprint("watermarks", true); basefont bf = basefont.createfont(); pdfcontentbyte cb = stamp.getovercontent(1); cb.begintext(); cb.setfontandsize(bf, 18); cb.beginlayer(layer); cb.showtextaligned(element.align_left, "watermark line 1", 50, 55, 0); cb.showtextaligned(element.align_left, "watermark line 2", 50, 40, 0); cb.endlayer(); cb.endtext(); stamp.close(); reader.close();
when check layer properties adobe reader (version 10), see "initial state : print" property stays @ "prints when visible" while should "always print".
i tried creating layers on new pdf document , there setprint()
works.
what doing wrong ?
i have same problem. workaround, can utilize new document
, getimportedpage
instead of pdfstamper
. unfortunately, loose hyperlink because pages converted images. tried utilize pdfcopy
reproduced same issue. interested in solution allowing me add together watermark without changing source file. degraded sample solution :
pdfreader pdfreaders = new pdfreader(filepaths); document document = new document(pdfreaders.getpagesizewithrotation(1)); pdfwriter pdfwriterd = pdfwriter.getinstance(document, new fileoutputstream(filepathd)); document.open(); pdfcontentbyte pdfcontentbyted = pdfwriterd.getdirectcontent(); basefont basefont = basefont.createfont(basefont.helvetica, basefont.winansi, basefont.embedded); int n = pdfreaders.getnumberofpages(); pdflayer pdflayer = new pdflayer("watermark", pdfwriterd); pdflayer.setprint("print", true); pdflayer.setview(visiblescreen); (int = 1; <= n; i++) { rectangle pagesizes =pdfreaders.getpagesizewithrotation(i); float pagewidth = pagesizes.getwidth() / 2; float pageheight = pagesizes.getheight() / 2; float grade = (float)(math.todegrees(math.atan(pagesizes.getheight()/pagesizes.getwidth()))); document.setpagesize(pagesizes); document.newpage(); pdfimportedpage pdfimportedpage = pdfwriterd.getimportedpage(pdfreaders, i); int rotation = pdfreaders.getpagerotation(i); //this value can 0, 90, 180 or 270. if (rotation == 0) pdfcontentbyted.addtemplate(page, 1, 0, 0, 1, 0, 0); else if (rotation == 90) pdfcontentbyted.addtemplate(page, 0, -1, 1, 0, 0, pagesizes.getheight()); else if (rotation == 180) pdfcontentbyted.addtemplate(page, -1, 0, 0, -1, pagesizes.getheight(), pagesizes.getwidth()); else if (rotation == 270) pdfcontentbyted.addtemplate(page, 0, 1, -1, 0, pagesizes.getwidth(), 0); pdfcontentbyted.beginlayer(pdflayer); pdfcontentbyted.begintext(); pdfcontentbyted.setfontandsize(basefont, policesize); pdfcontentbyted.setcolorfill(col); pdfcontentbyted.showtextaligned(pdfcontentbyte.align_center, text, pagewidth, pageheight, degree); pdfcontentbyted.endtext(); pdfcontentbyted.endlayer(); } document.close(); pdfreaders.close();
pdf itext
Comments
Post a Comment