如何使用iText从PDF文件中获取所有字段和值? [英] How do I get all the fields and value from a PDF file using iText?

查看:189
本文介绍了如何使用iText从PDF文件中获取所有字段和值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用下面的代码,我试图获取所有字段及其值,但它只返回字段值。我需要做什么才能获得两者?

Using the code below, I'm trying to get all the fields and their values, but it's only returning the field values. What do I need to do to get both?

   package PrintFiled;
    /*

        Usage: java TestDocument <pdf file>

    */

    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.Collection;

    import java.util.HashMap;
    import java.util.List;
    import java.util.Iterator;
    import java.util.Map;

    import org.pdfbox.pdmodel.interactive.form.PDField;

    import com.lowagie.text.pdf.AcroFields;
    import com.lowagie.text.pdf.MultiColumnText;
    import com.lowagie.text.pdf.PdfDictionary;
    import com.lowagie.text.pdf.RadioCheckField;
    import com.lowagie.text.pdf.PdfSignature;

    import com.lowagie.text.pdf.PdfReader;
    import com.lowagie.text.pdf.PdfStamper;
    import com.lowagie.text.pdf.AcroFields;
    import com.lowagie.text.pdf.AcroFields.*;

    public class TestDocument
    {
        public static void main(String[] args) throws Exception
        {

            // get the destination

            String location = "test/";

            if (location != null && !location.endsWith(File.separator))

            {

            location = location + File.separator;

            }



            PdfReader reader = new PdfReader(location + "acc.pdf");

            String name = "Output.pdf";

            PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(location + name));

            AcroFields form = stamp.getAcroFields();


            String last = "subform[0].LastName[0]";

            String first = "subform[0].FirstName[0]";

            String ProcessDate="subform[0].ProcessDate[0]";

            form.setField(last, "HRISTOV");

            form.setField(first, "NEDKO");
            form.setField(ProcessDate, "Process");

            System.out.println("last Name  :"+last.toString());


            Map val =new HashMap();
            //val=form.getFieldCache();
            //System.out.println("Value   :"+val);
             Iterator it = val.entrySet().iterator();
             while (it.hasNext()) 
                {
                    Map.Entry pairs = (Map.Entry)it.next();
                    System.out.println("Key   :"+pairs.getKey() + " = "+"Value  :" + pairs.getValue());
                }

                    Collection fieldlist = form.getFields().keySet();
    //              for (Iterator i = val.iterator(); i.hasNext(); ) 
                         for (Iterator i = fieldlist.iterator(); i.hasNext(); ) 
                                {

                                    System.out.println(i.next().toString());

                                System.out.println("Value    :"+val);
                                }
            /*List fields = form.getFields();
            Iterator fieldsIter = fields.iterator();

            System.out.println(new Integer(fields.size()).toString()
                    + " top-level fields were found on the form");

         while (fieldsIter.hasNext()) {
                PDField field = (PDField) fieldsIter.next();
               // processField(field, "|--", field.getPartialName());
                System.out.println("Field  :"+fieldsIter);
           }
             */
            System.out.println("First Name:"+form.getField(first));
            System.out.println("LastName  :"+form.getField(last));
            System.out.println("ProcessDate :"+form.getField(ProcessDate));

            // close pdf stamper
            stamp.setFormFlattening(true);
            stamp.close();
            reader.close();
        }
    }


推荐答案

到使用iText获取所有字段及其值:

To get all the fields and their values with iText:

// you only need a PdfStamper if you're going to change the existing PDF.
PdfReader reader = new PdfReader( pdfPath );

AcroFields fields = reader.getAcroFields();

Set<String> fldNames = fields.getFields().keySet();

for (String fldName : fldNames) {
  System.out.println( fldName + ": " + fields.getField( fldName ) );
}

除此之外,如果我们能看到给你的PDF文件,它会有所帮助麻烦。

Beyond that, it would help if we could see a PDF that is giving you trouble.

这篇关于如何使用iText从PDF文件中获取所有字段和值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆