hi tilman

i dont understand though. the reason why i save the graphic state is so
that i could rotate the watermark text to vertical and restore it so the
page's original contents will not be rotated.

or i did it the wrong way?

please advise

thank you


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

> 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
>>>
>>

Reply via email to