Hello ChunHsia Tang, hello all, > On 21 February 2018 at 10:16 chunhsia_t...@mazak.co.jp wrote: > > hi,
I'm sorry I'm replying only now, I just got your email from the mailing list (approved there: Tue, 06 Mar 2018 01:07:23 +0000) as there was an outage/reliability problem at SourceForge.net. > > > a pdf page has some text and image > > add watermark, watermark appear on top text and image I'm no expert on real (removal-protected) watermarks, sorry. That said, when an image or some text is added to a PDF page after other elements of the page, it appears on top of them. That is because PoDoFo directly only supports appending to a PDF page's content stream via the PdfPainter API, so to put something in between, either lower-level PoDoFo APIs need to be used or (only possible if the page is created with PoDoFo of course) place the drawing call for it between the others. > > doc.Load("D:\\test.pdf"); > PdfExtGState gstate(&doc); > pPage = doc.GetPage(0); > painter.SetPage(pPage); > painter.SetFont(pFont); > gstate.SetFillOpacity(0.5); > gstate.SetStrokeOpacity(0.5); > painter.SetExtGState(&gstate); > painter.Save(); The Save() call should bif youe put before SetExtGState() so that the (not yet "extended") graphics state set before the latter call can be restored further down in the code by Restore(). > painter.DrawText(100, 100, "test test test test test test test test test"); Where do you add the image, please? I can't see it from this code. > > how to add watermark appear at front text but behind image? To have the "watermark" (not a real one AFAIK) appear in front of the text but behind the image, either draw it after the text but before the image (if you're using PoDoFo for all that) or use PdfContentsTokenizer to find where the text ends, copy the part of the content stream (from PdfPainter::GetCanvas()) after that offset in it to somewhere else, then truncate the original there (FinishPage(), then use PdfStream methods for that, after it's done call PdfPainter::SetPage() again) then draw to it: Save() before SetExtGState(), see above, call Restore(), then append the saved part of the content stream (just Append(), don't call BeginAppend() or EndAppend() or any method which is to call these, PdfPainter::SetPage() has already called the first one), then call PdfPainter::FinishPage() (calls EndAppend() for you) and it should work (I haven't tested it myself, though, or I would still be busy with that for quite some time). > > > thanks You're welcome, I hope this helps you enough. Best regards, mabri ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Podofo-users mailing list Podofo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/podofo-users