pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maruan Sahyoun <sahy...@fileaffairs.de>
Subject Re: How flatten without changing appearance
Date Tue, 15 Sep 2015 06:48:05 GMT
Hi Tilman,

> Am 15.09.2015 um 08:17 schrieb Tilman Hausherr <THausherr@t-online.de>:
> 
> 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 <sahyoun@fileaffairs.de>:
>>> 
>>> 
>>> 
>>>> Am 14.09.2015 um 16:53 schrieb Kevin Ternes <KTernes@thegeneral.com>:
>>>> 
>>>> 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:sahyoun@fileaffairs.de]
>>>> Sent: Saturday, September 12, 2015 1:55 AM
>>>> To: users@pdfbox.apache.org
>>>> Subject: Re: How flatten without changing appearance
>>>> 
>>>> Hi,
>>>> 
>>>>> Am 12.09.2015 um 00:08 schrieb Kevin Ternes <KTernes@thegeneral.com>:
>>>>> 
>>>>> 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:sahyoun@fileaffairs.de]
>>>>> Sent: Friday, September 11, 2015 12:17 PM
>>>>> To: users@pdfbox.apache.org
>>>>> 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 <KTernes@thegeneral.com>:
>>>>>> 
>>>>>> 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:sahyoun@fileaffairs.de]
>>>>>> Sent: Friday, September 11, 2015 3:15 AM
>>>>>> To: users@pdfbox.apache.org
>>>>>> 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: users-unsubscribe@pdfbox.apache.org
>>>> For additional commands, e-mail: users-help@pdfbox.apache.org
>>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
>>> For additional commands, e-mail: users-help@pdfbox.apache.org
>>> 
>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
> For additional commands, e-mail: users-help@pdfbox.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org


Mime
View raw message