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]