Hi all,
I've been asked to dive into the iText source in order to allow for the
flattening of rich text fields on our PDF forms (currently, iText simply
stamps the XML code into the field).
Now one solution I thought of would be to simply use
partialFormFlattening(fieldName) on fields not containing the rich text
formatting, and then setting the rich text fields to "read-only" (via
AcroFields.setFieldProperty(...)); however, this doesn't work - it still
stamps the actual XML code onto the field and the Reader will not render
it as rich text in the stamped PDF.
Please visit the code I've written below and feel free to point out any
errors/omissions I have made when trying to accomplish this, or if I'm
failing to understand the usage of the methods outlined in the
Documentation. (Please note, as suggested in some current iText archive
articles, I've also attempted this with a call to setField(name,value)
after the setFieldProperty() statement with the same results). I'm
using the most recent SVN version of the iText source compiled via
Eclipse 3.2.2.
// Prepare FDF/PDF reader objects
FdfReader inFDF = new FdfReader(inFDFFilename);
PdfReader inPDF = new PdfReader(inPDFFilename);
// create our stamper instance
PdfStamper stp = new PdfStamper(inPDF, new
FileOutputStream(outPDFFilename));
// set form flattening flag
stp.setFormFlattening(true);
// Merge the FDF data into the PDF
AcroFields af = stp.getAcroFields();
af.setFields(inFDF);
// Iterate through the list of fields
HashMap hm = af.getFields();
Iterator i = hm.keySet().iterator();
while (i.hasNext()) {
String fieldName = (String)i.next();
String fieldData = af.getField(fieldName);
if (fieldData.indexOf("<?xml") >= 0) {
// System.out.println("xml data found in "+fieldName);
// simply mark this field as "read-only" but keep
everything intact
// so that the client's Reader can render the
XML/rich text formatting itself
af.setFieldProperty(fieldName, "setfflags",
PdfFormField.FF_READ_ONLY, null);
// af.setField(fieldName, fieldData);
} else {
// this field can be flattened
stp.partialFormFlattening(fieldName);
}
}
// close the stamper
stp.close();
Thanks!
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://itext.ugent.be/itext-in-action/