Use PdfCopyFields instead of PdfCopy.
Paulo
----- Original Message -----
From: "Jeff Randolph" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, June 15, 2006 10:54 PM
Subject: [iText-questions] (no subject)
>I have some one off pdf java code in which I'm using Itext-1.4.1. I used
> a number of examples and code found on this list and elsewhere - so if it
> looks familiar it probably is.
>
> The code performs the following:
> for each file it finds in a directory it reads the file and fields and
> replaces any fields named *.1 with *.2 (2..5) then saves the new file
> naming the new file oldFileName.2.pdf - it then concats itself to the end
> of the oldFileName.pdf. I do this 5 times up through oldFileName.5.pdf
> (which is 5 copies of oldFileName.pdf with renamed fields on each.
>
> It also contains fields that it doesn't rename and I want these to be the
> same on each page in the new file.
>
> The problem is any fields on file1 that aren't renamed will not copy over
> correcty to file2 - they appear correct in the form tool in acrobat until
> I open up the field - it doesn't have a name and will blow up when I try
> to merge an fdf with it.
>
> I'm attempting to include the code here... Thanks in advance for any
> suggestions.
>
> //begin code
>
>
> import java.io.File;
> import java.io.FileOutputStream;
> import java.io.FilenameFilter;
> import java.util.ArrayList;
> import java.util.HashMap;
> import java.util.Iterator;
> import java.util.List;
> import java.util.Set;
>
> import com.lowagie.text.Document;
> import com.lowagie.text.pdf.AcroFields;
> import com.lowagie.text.pdf.PdfCopy;
> import com.lowagie.text.pdf.PdfImportedPage;
> import com.lowagie.text.pdf.PdfReader;
> import com.lowagie.text.pdf.PdfStamper;
> import com.lowagie.text.pdf.SimpleBookmark;
>
> public class RenameFormFieldsv5
> {
>
> public static void usage()
> {
> System.out.println("Rename Fields");
> // System.out.println("usage: rename_fields in_path out_path
> // [[name1=newname1]...[namex=newnamex]]");
> }
>
> // Make sure path exists, and is a directory
> public static boolean isValidPath(String path)
> {
> File dir = new File(path);
>
> if(!dir.exists())
> return (false);
>
> if(!dir.isDirectory())
> return (false);
>
> return (true);
> }
>
> // Rename fields in in_pdf using args[] array, output to out_pdf
> public static void process(String in_pdf)
> {
> System.out.println("Processing: " + in_pdf);
>
> int fileIndexMax = 5;
> try
> {
> for(int fileIndex = 2; fileIndex <= fileIndexMax; fileIndex++)
> {
> // modify the fields
> String out_tmp = in_pdf.replace(".pdf", "." + fileIndex +
> ".pdf");
> PdfStamper stamp = new PdfStamper(
> new PdfReader(in_pdf), new FileOutputStream(out_tmp));
> AcroFields form = stamp.getAcroFields();
> HashMap fields = new HashMap(form.getFields());
> Set keys = fields.keySet();
> for(Iterator i = keys.iterator(); i.hasNext();)
> {
> String value = (String)i.next();
> if(value.startsWith("replform"))
> {
> String newValue = value.replace(".1", "." + fileIndex);
> System.out.println("\tReplacing " + value + " with " +
> newValue);
> form.renameField(value, newValue);
> }
>
> }
> stamp.close();
>
> // concatenate files
> System.out.println("\tConcatenating files...");
> if(fileIndex == 2)
> concatPDF(
> new String[]{
> in_pdf,
> out_tmp,
> out_tmp.replace(".tmp", ".pdf")});
> else
> concatPDF(
> new String[]{
> out_tmp.replace("." + fileIndex + ".tmp", "." +
> (fileIndex - 1) + ".pdf"),
> out_tmp,
> out_tmp.replace(".tmp", ".pdf")});
>
> // clean up --
> System.out.println("\tDeleting " + out_tmp + "...");
> new File(out_tmp).delete();
> }
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
> }
>
> // Main entry point
> public static void main(String[] args)
> {
> // if (args.length < 2) {
> // usage();
> // return;
> // }
> int idx = 0;
> // if (args.length - idx < 2) {
> // usage();
> // return;
> // }
>
> // Get and validate input path
> String in_path = args[idx];
> if(!in_path.endsWith("\\"))
> {
> in_path = in_path + "\\";
> }
> if(!isValidPath(in_path))
> {
> System.out.println("invalid path: " + in_path);
> return;
> }
>
> // // Get and validate output path
> // String out_path = args[idx + 1];
> // if (!out_path.endsWith("\\") )
> // {
> // out_path = out_path + "\\";
> // }
> // if (! isValidPath(out_path) )
> // {
> // System.out.println("invalid path: " + out_path);
> // return;
> // }
> //
> // // Make sure we don't overwrite files in same directory
> // if (in_path.equals(out_path))
> // {
> // System.out.println("input path cannot be same as output path");
> // return;
> // }
>
> // Get list of all pdf files in input path
> File dir = new File(in_path);
> FilenameFilter filter = new FilenameFilter()
> {
> public boolean accept(File dir, String name)
> {
> return name.endsWith(".pdf");
> }
> };
> String[] children = dir.list(filter);
>
> // If no pdf files found, end with error message
> if(children == null)
> {
> // Either dir does not exist or is not a directory
> System.out.println("No PDF files found in directory " + in_path);
> }
> else
> {
> for(int i = 0; i < children.length; i++)
> {
> // Get filename of PDF file
> String filename = children[i];
> // Process the PDF file
> process(in_path + filename); // , out_path + filename, args);
> }
> }
> }
>
> public static void concatPDF(String args[])
> {
> if(args.length < 2)
> {
> System.err.println("arguments: file1 [file2 ...] destfile");
> }
> else
> {
> try
> {
> int pageOffset = 0;
> ArrayList master = new ArrayList();
> int f = 0;
> String outFile = args[args.length - 1];
> Document document = null;
> PdfCopy writer = null;
> while(f < args.length - 1)
> {
> // we create a reader for a certain document
> PdfReader reader = new PdfReader(args[f]);
> reader.consolidateNamedDestinations();
> // we retrieve the total number of pages
> int n = reader.getNumberOfPages();
> List bookmarks = SimpleBookmark.getBookmark(reader);
> if(bookmarks != null)
> {
> if(pageOffset != 0)
> SimpleBookmark.shiftPageNumbers(bookmarks,
> pageOffset, null);
> master.addAll(bookmarks);
> }
> pageOffset += n;
> System.out.println("\tThere are " + n + " pages in " +
> args[f]);
>
> if(f == 0)
> {
> // 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("\tProcessed page " + i);
> }
> writer.freeReader(reader);
> reader.close();
> f++;
> }
> if(master.size() > 0)
> writer.setOutlines(master);
> // step 5: we close the document
> document.close();
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
> }
> }
> }
> //end code
>
>
>
>
>
>
> Thanks!
>
>
>
> _______________________________________________
> iText-questions mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/itext-questions
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions