PdfCopy doesn't behave very well with form fields. Have a look at PdfCopyFieldsImp.
----- Original Message ----- From: "Richard Freedman" <[EMAIL PROTECTED]> To: <[email protected]> Sent: Wednesday, February 02, 2005 9:50 PM Subject: [iText-questions] Copying AcroForm? Hello, I've modified the CopyPdf example in an attempt to copy the content of one PDF file, and the AcroForm from another, to create a third PDF. When it attempts to copy the AcroForm, it throws an exception: java.lang.NullPointerException at com.lowagie.text.pdf.PdfWriter.getReaderFile(PdfWriter.java:1951) at com.lowagie.text.pdf.PRStream.toPdf(PRStream.java:194) at com.lowagie.text.pdf.PdfIndirectObject.writeTo(PdfIndirectObject.java:167) at com.lowagie.text.pdf.PdfWriter$PdfBody.add(PdfWriter.java:369) at com.lowagie.text.pdf.PdfWriter$PdfBody.add(PdfWriter.java:349) at com.lowagie.text.pdf.PdfWriter$PdfBody.add(PdfWriter.java:341) at com.lowagie.text.pdf.PdfWriter.addToBody(PdfWriter.java:1860) at com.lowagie.text.pdf.PdfCopy.copyIndirect(PdfCopy.java:194) at com.lowagie.text.pdf.PdfCopy.copyObject(PdfCopy.java:260) at com.lowagie.text.pdf.PdfCopy.copyArray(PdfCopy.java:246) at com.lowagie.text.pdf.PdfCopy.copyObject(PdfCopy.java:262) at com.lowagie.text.pdf.PdfCopy.copyDictionary(PdfCopy.java:216) at com.lowagie.text.pdf.PdfCopy.copyObject(PdfCopy.java:258) at com.lowagie.text.pdf.PdfCopy.copyIndirect(PdfCopy.java:193) at com.lowagie.text.pdf.PdfCopy.copyObject(PdfCopy.java:260) at com.lowagie.text.pdf.PdfCopy.copyDictionary(PdfCopy.java:216) at com.lowagie.text.pdf.PdfCopy.copyObject(PdfCopy.java:258) at com.lowagie.text.pdf.PdfCopy.copyIndirect(PdfCopy.java:193) at com.lowagie.text.pdf.PdfCopy.copyObject(PdfCopy.java:260) at com.lowagie.text.pdf.PdfCopy.copyArray(PdfCopy.java:246) at com.lowagie.text.pdf.PdfCopy.copyObject(PdfCopy.java:262) at com.lowagie.text.pdf.PdfCopy.copyDictionary(PdfCopy.java:216) at com.lowagie.text.pdf.PdfCopy.copyAcroForm(PdfCopy.java:384) at AcroFormCopy.main(AcroFormCopy.java:71) The CopyPdf example works fine on the same input file. I'm assuming that I'm doing something wrong - does anyone have any insight into this, or a better way to do it? Here's the source code: ---------------------------------------------------------------------------- ----------------------------------- import java.io.*; import com.lowagie.text.*; import com.lowagie.text.pdf.*; /** * Utility to copy PDF Form Fields from one PDF file to another. * Useful when updating a PDF file by regenerating it from MS Word or another source that does not preserve the fields. * Use this utility to copy the fields from the previous version to the new version. */ public class AcroFormCopy { /** * @param args the command line arguments */ public static void main(String args[]) { if (args.length != 3) { System.err.println("usage: java AcroFormCopy fieldspdf nofieldspdf destpdf"); } else { try { String formFile = args[0]; String imageFile = args[1]; String outFile = args[2]; Document document = null; PdfCopy writer = null; // we create a reader for the "nofields file" PdfReader reader = new PdfReader(imageFile); // we retrieve the total number of pages int n = reader.getNumberOfPages(); System.out.println("Copying " + n + " page(s) of content from " + imageFile + " to " + outFile); // step 1: creation of a document-object document = new Document(reader.getPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document writer = new PdfCopy(document, new FileOutputStream(outFile)); // step 3: we open the document document.open(); // step 4: we add content PdfImportedPage page; for (int i = 0; i < n; ) { ++i; page = writer.getImportedPage(reader, i); writer.addPage(page); System.out.println("Processed page " + i); } // create a reader for the "form file" PdfReader formReader = new PdfReader(formFile); // copy the form PRAcroForm form = formReader.getAcroForm(); if(form == null) { System.out.println("No fields found in " + formFile); } else { System.out.println("Copying fields from " + formFile + " to " + outFile); writer.copyAcroForm(formReader); } // step 5: we close the document document.close(); System.out.println("done!"); } catch(Exception e) { e.printStackTrace(); } } } } ---------------------------------------------------------------------------- ----------------------------------- Thanks, -Rich -------------------------------------------------- Rich Freedman Senior Software Engineer Cross Current Corporation New Hope, PA, USA http://www.crosscurrent.com -------------------------------------------------- ------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ iText-questions mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/itext-questions ------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ iText-questions mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/itext-questions
