Sophie

Sophie

distrib > Mandriva > 2007.0 > i586 > media > contrib-release > by-pkgid > 29e0da3ddcddab73ae8621fc62033227 > files > 97

itext-manual-1.4.5-1mdv2007.0.i586.rpm

/*
 * $Id: ListFields.java,v 1.3 2005/05/09 11:52:44 blowagie Exp $
 * $Name:  $
 *
 * This code is part of the 'iText Tutorial'.
 * You can find the complete tutorial at the following address:
 * http://itextdocs.lowagie.com/tutorial/
 *
 * This code is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * itext-questions@lists.sourceforge.net
 */

package com.lowagie.examples.forms;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;

import com.lowagie.text.pdf.PRAcroForm;
import com.lowagie.text.pdf.PRIndirectReference;
import com.lowagie.text.pdf.PdfArray;
import com.lowagie.text.pdf.PdfDictionary;
import com.lowagie.text.pdf.PdfLister;
import com.lowagie.text.pdf.PdfName;
import com.lowagie.text.pdf.PdfObject;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfString;

/**
 * Demonstrates the use of PageSize.
 * @author blowagie
 */
public class ListFields {
    /**
     * Creates a PDF document with a certain pagesize
     * @param args no arguments needed here
     */
    public static void main(String[] args) {
        
        System.out.println("Listfields");
                
        try {
            PrintStream stream = new PrintStream(new FileOutputStream("listfields.txt"));
            stream.println("ListFields output file");
            stream.println("==================================================");
            for (int i = 0; i < args.length; i++) {
            	stream.print("Filename: ");
            	stream.println(args[i]);
            	stream.println();
                PdfReader reader = new PdfReader(args[i]);
                PRAcroForm form = reader.getAcroForm();
                if (form == null) {
                    stream.println("This document has no fields.");
                    break;
                }
                PdfLister list = new PdfLister(stream);
                HashMap refToField = new HashMap();
                ArrayList fields = form.getFields();
                for (int k = 0; k < fields.size(); ++k) {
                    PRAcroForm.FieldInformation field = (PRAcroForm.FieldInformation)fields.get(k);
                    refToField.put(new Integer(field.getRef().getNumber()), field);
                }
                for (int page = 1; page <= reader.getNumberOfPages(); ++page) {
                    PdfDictionary dPage = reader.getPageN(page);
                    PdfArray annots = (PdfArray)PdfReader.getPdfObject((PdfObject)dPage.get(PdfName.ANNOTS));
                    if (annots == null)
                        continue;
                    ArrayList ali = annots.getArrayList();
                    for (int annot = 0; annot < ali.size(); ++annot) {
                        PdfObject refObj = (PdfObject)ali.get(annot);
                        PRIndirectReference ref = null;
                        PdfDictionary an = (PdfDictionary)PdfReader.getPdfObject(refObj);
                        PdfName name = (PdfName)an.get(PdfName.SUBTYPE);
                        if (name == null || !name.equals(PdfName.WIDGET))
                            continue;
                        PdfArray rect = (PdfArray)an.get(PdfName.RECT);
                        String fName = "";
                        PRAcroForm.FieldInformation field = null;
                        while (an != null) {
                            PdfString tName = (PdfString)an.get(PdfName.T);
                            if (tName != null)
                                fName = tName.toString() + "." + fName;
                            if (refObj.type() == PdfObject.INDIRECT && field == null) {
                                ref = (PRIndirectReference)refObj;
                                field = (PRAcroForm.FieldInformation)refToField.get(new Integer(ref.getNumber()));
                            }
                            refObj = (PdfObject)an.get(PdfName.PARENT);
                            an = (PdfDictionary)PdfReader.getPdfObject(refObj);
                        }
                        if (fName.endsWith("."))
                            fName = fName.substring(0, fName.length() - 1);
                        stream.println("page " + page + ", name - " + fName);
                        list.listAnyObject(rect);
                        if (field != null) {
                            stream.println("Merged attributes of " + field.getName());
                            list.listAnyObject(field.getInfo());
                            stream.println("Dictionary of " + field.getName());
                            list.listAnyObject(PdfReader.getPdfObject(field.getRef()));
                        }
                    }
                }
                stream.println("==================================================");
            }
            stream.flush();
            stream.close();
        }
        catch(IOException ioe) {
            System.err.println(ioe.getMessage());
        }
    }
}