/** * 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)); }
/** * 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)); } } }
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); } }
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; } } }
/** 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); } }