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?

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]

Reply via email to