コード例 #1
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;
         }
     }
 }
コード例 #2
0
ファイル: PdfCopy.cs プロジェクト: htlp/itextsharp
        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;
                    } 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 a field with this name already exists, we try to rename it
                    // so a new field will be created.
                    if (obj != null) {
                        s = RenameField(obj, map, merged);
                    }
                    // generate a new field
                    PdfDictionary field = new PdfDictionary();
                    if (PdfName.SIG.Equals(merged.Get(PdfName.FT)))
                        hasSignature = true;
                    foreach (PdfName key in merged.Keys) {
                        if(fieldKeys.Contains(key))
                            field.Put(key, merged.Get(key));
                    }
                    List<Object> list = new List<Object>();
                    list.Add(field);
                    CreateWidgets(list, item);
                    map[s] =  list;
                    return;
                }
            }
        }
コード例 #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
 private 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 (Object element in merged.Keys) {
             PdfName key = (PdfName)element;
             if (PdfCopyFieldsImp.widgetKeys.ContainsKey(key) || annotId.Equals(key) || PdfName.TYPE.Equals(key))
                 widget.Put(key, merged.Get(key));
         }
         widget.Put(PdfCopyFieldsImp.iTextTag, new PdfNumber(item.GetTabOrder(k) + 1));
         list.Add(widget);
     }
 }