예제 #1
0
 /** Sets all the fields from this <CODE>AcroFields</CODE>
  * @param acro the <CODE>AcroFields</CODE>
  */
 virtual public void SetFields(AcroFields af)
 {
     foreach (KeyValuePair <string, AcroFields.Item> entry in af.Fields)
     {
         String          fn   = entry.Key;
         AcroFields.Item 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);
     }
 }
예제 #2
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  = (PdfDictionary)item.merged[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);
     }
 }
예제 #3
0
 internal void CreateWidgets(List <Object> 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);
     }
 }
예제 #4
0
 internal void CreateWidgets(ArrayList list, AcroFields.Item item)
 {
     for (int k = 0; k < item.merged.Count; ++k)
     {
         list.Add(item.page[k]);
         PdfDictionary merged = (PdfDictionary)item.merged[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((int)item.tabOrder[k] + 1));
         list.Add(widget);
     }
 }
예제 #5
0
        internal void MergeField(String name, AcroFields.Item item)
        {
            Dictionary <string, object> map = fieldTree;
            StringTokenizer             tk  = new StringTokenizer(name, ".");

            if (!tk.HasMoreTokens())
            {
                return;
            }
            while (true)
            {
                String s = tk.NextToken();
                Object obj;
                map.TryGetValue(s, out obj);
                if (tk.HasMoreTokens())
                {
                    if (obj == null)
                    {
                        obj    = new Dictionary <string, object>();
                        map[s] = obj;
                        map    = (Dictionary <string, object>)obj;
                        continue;
                    }
                    else if (obj is Dictionary <string, object> )
                    {
                        map = (Dictionary <string, object>)obj;
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    if (obj is Dictionary <string, object> )
                    {
                        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));
                            }
                        }
                        List <object> list = new List <object>();
                        list.Add(field);
                        CreateWidgets(list, item);
                        map[s] = list;
                    }
                    else
                    {
                        List <object> list  = (List <object>)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;
                }
            }
        }
        internal void MergeField(string name, AcroFields.Item item)
        {
            var map = FieldTree;
            var tk  = new StringTokenizer(name, ".");

            if (!tk.HasMoreTokens())
            {
                return;
            }

            while (true)
            {
                var s   = tk.NextToken();
                var 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;
                    }

                    var merged = item.GetMerged(0);
                    if (obj == null)
                    {
                        var 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));
                            }
                        }
                        var list = new ArrayList
                        {
                            field
                        };
                        CreateWidgets(list, item);
                        map[s] = list;
                    }
                    else
                    {
                        var list  = (ArrayList)obj;
                        var field = (PdfDictionary)list[0];
                        var type1 = (PdfName)field.Get(PdfName.Ft);
                        var type2 = (PdfName)merged.Get(PdfName.Ft);
                        if (type1 == null || !type1.Equals(type2))
                        {
                            return;
                        }

                        var flag1 = 0;
                        var f1    = field.Get(PdfName.Ff);
                        if (f1 != null && f1.IsNumber())
                        {
                            flag1 = ((PdfNumber)f1).IntValue;
                        }

                        var flag2 = 0;
                        var 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;
                }
            }
        }
예제 #7
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 = (PdfDictionary)item.merged[0];
                    if (obj == null)
                    {
                        PdfDictionary field = new PdfDictionary();
                        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;
                }
            }
        }