Example #1
0
 /**
 * Finds the complete field name contained in the "classic" forms from a partial
 * name.
 * @param name the complete or partial name
 * @param af the fields
 * @return the complete name or <CODE>null</CODE> if not found
 */
 public String FindFieldName(String name, AcroFields af)
 {
     Hashtable items = af.Fields;
     if (items.ContainsKey(name))
         return name;
     if (acroFieldsSom == null) {
         if (items.Count == 0 && xfaPresent)
             acroFieldsSom = new AcroFieldsSearch(datasetsSom.Name2Node.Keys);
         else
             acroFieldsSom = new AcroFieldsSearch(items.Keys);
     }
     if (acroFieldsSom.AcroShort2LongName.ContainsKey(name))
         return (String)acroFieldsSom.AcroShort2LongName[name];
     return acroFieldsSom.InverseSearchGlobal(Xml2Som.SplitParts(name));
 }
Example #2
0
 /**
 * Mark all the item dictionaries used matching the given flags
 *
 * @since 2.1.5
 * @param writeFlags WRITE_MERGED is ignored
 */
 public void MarkUsed( AcroFields parentFields, int writeFlags )
 {
     if ((writeFlags & WRITE_VALUE) != 0) {
         for (int i = 0; i < Size; ++i) {
             parentFields.MarkUsed( GetValue( i ) );
         }
     }
     if ((writeFlags & WRITE_WIDGET) != 0) {
         for (int i = 0; i < Size; ++i) {
             parentFields.MarkUsed(GetWidget(i));
         }
     }
 }
Example #3
0
 internal void CreateWidgets(ArrayList list, AcroFields.Item item)
 {
     for (int k = 0; k < item.Size; ++k) {
         list.Add(item.GetPage(k));
         PdfDictionary merged = item.GetMerged(k);
         PdfObject dr = merged.Get(PdfName.DR);
         if (dr != null)
             PdfFormField.MergeResources(resources, (PdfDictionary)PdfReader.GetPdfObject(dr));
         PdfDictionary widget = new PdfDictionary();
         foreach (PdfName key in merged.Keys) {
             if (widgetKeys.ContainsKey(key))
                 widget.Put(key, merged.Get(key));
         }
         widget.Put(iTextTag, new PdfNumber(item.GetTabOrder(k) + 1));
         list.Add(widget);
     }
 }
Example #4
0
 internal void MergeField(String name, AcroFields.Item item)
 {
     Hashtable map = fieldTree;
     StringTokenizer tk = new StringTokenizer(name, ".");
     if (!tk.HasMoreTokens())
         return;
     while (true) {
         String s = tk.NextToken();
         Object obj = map[s];
         if (tk.HasMoreTokens()) {
             if (obj == null) {
                 obj = new Hashtable();
                 map[s] =  obj;
                 map = (Hashtable)obj;
                 continue;
             }
             else if (obj is Hashtable)
                 map = (Hashtable)obj;
             else
                 return;
         }
         else {
             if (obj is Hashtable)
                 return;
             PdfDictionary merged = item.GetMerged(0);
             if (obj == null) {
                 PdfDictionary field = new PdfDictionary();
                 if (PdfName.SIG.Equals(merged.Get(PdfName.FT)))
                     hasSignature = true;
                 foreach (PdfName key in merged.Keys) {
                     if (fieldKeys.ContainsKey(key))
                         field.Put(key, merged.Get(key));
                 }
                 ArrayList list = new ArrayList();
                 list.Add(field);
                 CreateWidgets(list, item);
                 map[s] =  list;
             }
             else {
                 ArrayList list = (ArrayList)obj;
                 PdfDictionary field = (PdfDictionary)list[0];
                 PdfName type1 = (PdfName)field.Get(PdfName.FT);
                 PdfName type2 = (PdfName)merged.Get(PdfName.FT);
                 if (type1 == null || !type1.Equals(type2))
                     return;
                 int flag1 = 0;
                 PdfObject f1 = field.Get(PdfName.FF);
                 if (f1 != null && f1.IsNumber())
                     flag1 = ((PdfNumber)f1).IntValue;
                 int flag2 = 0;
                 PdfObject f2 = merged.Get(PdfName.FF);
                 if (f2 != null && f2.IsNumber())
                     flag2 = ((PdfNumber)f2).IntValue;
                 if (type1.Equals(PdfName.BTN)) {
                     if (((flag1 ^ flag2) & PdfFormField.FF_PUSHBUTTON) != 0)
                         return;
                     if ((flag1 & PdfFormField.FF_PUSHBUTTON) == 0 && ((flag1 ^ flag2) & PdfFormField.FF_RADIO) != 0)
                         return;
                 }
                 else if (type1.Equals(PdfName.CH)) {
                     if (((flag1 ^ flag2) & PdfFormField.FF_COMBO) != 0)
                         return;
                 }
                 CreateWidgets(list, item);
             }
             return;
         }
     }
 }
Example #5
0
 /** Sets all the fields from this <CODE>AcroFields</CODE>
 * @param acro the <CODE>AcroFields</CODE>
 */
 public void SetFields(AcroFields af)
 {
     foreach (DictionaryEntry entry in af.Fields) {
         String fn = (String)entry.Key;
         AcroFields.Item item = (AcroFields.Item)entry.Value;
         PdfDictionary dic = item.GetMerged(0);
         PdfObject v = PdfReader.GetPdfObjectRelease(dic.Get(PdfName.V));
         if (v == null)
             continue;
         PdfObject ft = PdfReader.GetPdfObjectRelease(dic.Get(PdfName.FT));
         if (ft == null || PdfName.SIG.Equals(ft))
             continue;
         SetField(fn, v);
     }
 }