> Am 15.09.2015 um 08:56 schrieb Tilman Hausherr <[email protected]>:
>
> Am 15.09.2015 um 08:48 schrieb Maruan Sahyoun:
>> Hi Tilman,
>>
>>> Am 15.09.2015 um 08:17 schrieb Tilman Hausherr <[email protected]>:
>>>
>>> Am 15.09.2015 um 04:47 schrieb Maruan Sahyoun:
>>>> Hi Kevin,
>>>>
>>>> I've created https://issues.apache.org/jira/browse/PDFBOX-2970
>>>> <https://issues.apache.org/jira/browse/PDFBOX-2970> for that.
>>>>
>>>> In addition you can start playing with that code based on the current
>>>> PDFBox 2.0.0 snapshot.
>>>>
>>>>
>>>>
>>>> PDDocument doc = PDDocument.load(new File(...));
>>>> PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
>>>> // Iterate over all form fields and their widgets and
>>>> create a
>>>> // FormXObject at the page content level from that
>>>> for (PDField field : acroForm.getFieldTree())
>>>> {
>>>> for (PDAnnotationWidget widget :
>>>> ((PDTerminalField)field).getWidgets())
>>>> {
>>>> PDPage page = widget.getPage();
>>>> PDPageContentStream contentStream = new
>>>> PDPageContentStream(doc, page, true, true);
>>> I wasn't 100% sure what was meant with "flatten", but now I get it!
>>>
>>> I think the first one of the "new PDPageContentStream" should have the
>>> fifth parameter and be true, in case the existing content stream isn't
>>> included in q…Q.
>> thanks for stepping in.
>>
>> Is that really needed as we are storing/restoring the current state before
>> the new content is added. Putting a store/restore around the existing one -
>> assuming there is only one - would store/restore to the state before there
>> was any content stream. In addition if there are already multiple streams
>> before the new one would we need to put a store/restore around each of them?
>> If there wasn't any that would potentially change the behavior of the old
>> processing?
>
> The constructor identifies if there is already content, and only then, it
> inserts a saveGraphicsState() before the first existing stream and a
> restoreGraphicsState() at the end of the new one, so it work both with none,
> one, and many.
>
> Only doing it for the first one is to avoid having too many nesting q…Q
looking at how Adobe does it each of the new content streams is wrapped in a q
…Q - that's why I did the same.
>
> What I was thinking of is cases where the existing content stream(s) modifies
> the CTM without resetting it. This would have the effect that the "fields"
> would appear at the wrong place / wrong size / outside of the screen. We're
> having this every few months that somebody wants to add a stamp to a page, it
> works for most, except for one "special" file.
>
> Tilman
>
>
>>
>> BR
>> Maruan
>>
>>
>>
>>> Tilman
>>>
>>>> PDFormXObject fieldObject = new
>>>> PDFormXObject(widget.getAppearance().getNormalAppearance().getAppearanceStream().getCOSStream());
>>>> Matrix translationMatrix =
>>>> Matrix.getTranslateInstance(widget.getRectangle().getLowerLeftX(),
>>>> widget.getRectangle().getLowerLeftY());
>>>> contentStream.saveGraphicsState();
>>>> contentStream.transform(translationMatrix);
>>>> contentStream.drawForm(fieldObject);
>>>> contentStream.restoreGraphicsState();
>>>> contentStream.close();
>>>> }
>>>> }
>>>>
>>>> // preserve all non widget annotations
>>>> for (PDPage page : doc.getPages())
>>>> {
>>>> List<PDAnnotation> annotations = new ArrayList<PDAnnotation>();
>>>> for (PDAnnotation annotation:
>>>> page.getAnnotations())
>>>> {
>>>> if (!(annotation instanceof PDAnnotationWidget))
>>>> {
>>>> annotations.add(annotation);
>>>> }
>>>> }
>>>> page.setAnnotations(annotations);
>>>> }
>>>> // remove the fields
>>>> acroForm.setFields(Collections.<PDField>emptyList());
>>>> doc.save(...);
>>>> doc.close();
>>>>
>>>>
>>>> BR
>>>> Maruan
>>>>
>>>>
>>>>
>>>>> Am 14.09.2015 um 17:57 schrieb Maruan Sahyoun <[email protected]>:
>>>>>
>>>>>
>>>>>
>>>>>> Am 14.09.2015 um 16:53 schrieb Kevin Ternes <[email protected]>:
>>>>>>
>>>>>> I am trying to refactor for 2.0.0-SNAPSHOT now.
>>>>>>
>>>>>> Can someone tell me how to flatten a PDDocument in PDFBox 2 ?
>>>>>> All the examples seem to pertain to v1.x
>>>>> there are non but I've started to get that into the project
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Maruan Sahyoun [mailto:[email protected]]
>>>>>> Sent: Saturday, September 12, 2015 1:55 AM
>>>>>> To: [email protected]
>>>>>> Subject: Re: How flatten without changing appearance
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>>> Am 12.09.2015 um 00:08 schrieb Kevin Ternes <[email protected]>:
>>>>>>>
>>>>>>> Maruan,
>>>>>>> That would be great. Please have a look at:
>>>>>>> https://onedrive.live.com/redir?resid=9CCA324BE57ADA7!76929&authkey=!A
>>>>>>> KE0x0fh5QDkIIw&ithint=file%2czip This should demonstrate the problem
>>>>>>> by processing several files.
>>>>>> I took a quick look. Which version of PDFBox are you using? Would it be
>>>>>> possible to go to (the yet to be released) 2.0.0 version?
>>>>>>
>>>>>> BR
>>>>>> Maruan
>>>>>>
>>>>>>
>>>>>>> The users complaint is: Boxes are being greyed out and font sizes are
>>>>>>> being changed by the flatten.
>>>>>>> My flatten is done by the PDFBoxUtils.flatten() method.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> -Kevin
>>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: Maruan Sahyoun [mailto:[email protected]]
>>>>>>> Sent: Friday, September 11, 2015 12:17 PM
>>>>>>> To: [email protected]
>>>>>>> Subject: Re: How to merge forms where there is
>>>>>>>
>>>>>>> how urgent is it for you? If you could share a sample file and your
>>>>>>> code for flattening I could take a look.
>>>>>>>
>>>>>>> BR
>>>>>>> Maruan
>>>>>>>
>>>>>>>> Am 11.09.2015 um 18:23 schrieb Kevin Ternes <[email protected]>:
>>>>>>>>
>>>>>>>> I have not been able to successfully flatten a document without
>>>>>>>> affecting the formatting of the field.
>>>>>>>> There are some example codes out there but none of them work correctly
>>>>>>>> for me.
>>>>>>>>
>>>>>>>> -----Original Message-----
>>>>>>>> From: Maruan Sahyoun [mailto:[email protected]]
>>>>>>>> Sent: Friday, September 11, 2015 3:15 AM
>>>>>>>> To: [email protected]
>>>>>>>> Subject: Re: How to merge forms where there is
>>>>>>>>
>>>>>>>> Hi Kevin
>>>>>>>> None of these field values will need to be changed afterward the
>>>>>>>> merge. They are set to read-only.
>>>>>>>>> I tried flattening the source fields but most of these documents rely
>>>>>>>>> on field annotation for the field value formatting and this is not to
>>>>>>>>> be changed.
>>>>>>>> when a field is flattened correctly the formatting of the annotations
>>>>>>>> visually representing the field become part of the page content
>>>>>>>> stream. So if you don't need the fields at all - as there is no
>>>>>>>> further input - you could flatten the source documents prior to
>>>>>>>> merging them.
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> 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]
>>>>>
>>>
>>> ---------------------------------------------------------------------
>>> 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]
>>
>
>
> ---------------------------------------------------------------------
> 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]