You first call "cs.setGraphicsStateParameters(gs)" and then save the graphics state. So the setting will be kept even after you've called "cs.restoreGraphicsState();".

Tilman

Am 20.08.2017 um 09:33 schrieb chitgoks:
hi tilman

yes. the watermark is appended to an existing pdf. and my 5th parameter is
true

i just want it not to be selectable. prepend would have worked. but for an
existing page, what happens is that since i made the watermark text
transparent, the page's text also gets transparent.

this is my code. watermarks is an arraylist of string. max of 3.

PDFont font = PDType1Font.HELVETICA;
float fontSize = 80f;
PDPageTree pages = pdfDocument.getPages();

PDExtendedGraphicsState gs = new PDExtendedGraphicsState();
gs.setNonStrokingAlphaConstant(0.3f);
PDPage page = pages.get(0);

try (PDPageContentStream cs = new PDPageContentStream(pdfDocument, page,
AppendMode.APPEND, true, true)) {
     cs.setFont(font, fontSize);
     cs.setNonStrokingColor(Color.GRAY);
     cs.setGraphicsStateParameters(gs);
     for (int w=0; w<watermark.size(); w++) {
float stringWidth = font.getStringWidth(watermark.get(w)) / 1000 * fontSize;
float fontHeight = 15;
cs.saveGraphicsState();
cs.beginText();
if (watermark.size() == 1)
    cs.transform(Matrix.getRotateInstance(Math.toRadians(270),
(page.getCropBox().getWidth() - (fontHeight / 2)) / 2,
(page.getCropBox().getHeight() + stringWidth) / 2));
else if (watermark.size() == 2) {
    cs.transform(Matrix.getRotateInstance(Math.toRadians(270),
(page.getCropBox().getWidth() / 2) - (w == 0 ? -(fontHeight / 2) :
fontHeight),
(page.getCropBox().getHeight() + stringWidth) / 2));
}
else {
    float fontHeightValueToUse = fontHeight / 2;
    if (w == 0)
fontHeightValueToUse = -(fontHeight * 2);
    else if (w == 2)
fontHeightValueToUse = fontHeight * 3;

    cs.transform(Matrix.getRotateInstance(Math.toRadians(270),
(page.getCropBox().getWidth() - fontHeightValueToUse) / 2,
(page.getCropBox().getHeight() + stringWidth) / 2));
}
cs.showText(watermark.get(w));
cs.endText();
cs.restoreGraphicsState();
     }
} catch (Exception e) {

}

Website/Java Games: http://www.chitgoks.com
My Blogs:
http://tech.chitgoks.com
http://wuhtevah.chitgoks.com
http://disneyusa.blogspot.com

On Sun, Aug 20, 2017 at 2:56 PM, Tilman Hausherr <[email protected]>
wrote:

Am 20.08.2017 um 08:38 schrieb chitgoks:

Hi gilad. thank you for replying

there should still be some way to do this right? if not the content stream
then i guess the only other way is via overlays

Are you aware that you can always add a content stream to an existing
page? Either prepend or append. When appending, use the constructor with 5
parameters and set the last to true. For a watermark, prepend is probably
better.

Tilman


Website/Java Games: http://www.chitgoks.com
My Blogs:
http://tech.chitgoks.com
http://wuhtevah.chitgoks.com
http://disneyusa.blogspot.com

On Sat, Aug 19, 2017 at 4:42 PM, Gilad Denneboom <
[email protected]>
wrote:

If you're adding text it will always be selectable. If you don't want it
to
be you need to use an image.

On Sat, Aug 19, 2017 at 4:53 AM, chitgoks <[email protected]> wrote:

i have question regarding watermarks
so i have created some transparent like text in the content stream to

mimic

a watermark

problem is, it can still be selected. is there an option in content

stream

to flatten this?

i read about overlay but my code is already catered to content stream.
so
would be nice not having to use overlay if possible

any ideas?

mark


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to