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

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]

Reply via email to