Ejemplo n.º 1
0
        /// <summary>Attempts to determine which type of field a PdfDictionary represents</summary>
        /// <param name="dict"></param>
        /// <returns></returns>
        public static PdfAcroFieldType DetermineFieldType(PdfDictionary dict)
        {
            if (!dict.Elements.ContainsKey(Keys.FT))
            {
                return(PdfAcroFieldType.Unknown);
            }

            string            ft    = dict.Elements.GetName(Keys.FT);
            PdfAcroFieldFlags flags = (PdfAcroFieldFlags)dict.Elements.GetInteger(Keys.Ff);

            switch (ft)
            {
            case "/Btn":
                if ((flags & PdfAcroFieldFlags.Pushbutton) != 0)
                {
                    return(PdfAcroFieldType.PushButton);
                }

                if ((flags & PdfAcroFieldFlags.Radio) != 0)
                {
                    return(PdfAcroFieldType.RadioButton);
                }

                return(PdfAcroFieldType.CheckBox);

            case "/Tx":
                return(PdfAcroFieldType.Text);

            case "/Ch":
                if ((flags & PdfAcroFieldFlags.Combo) != 0)
                {
                    return(PdfAcroFieldType.ComboBox);
                }
                else
                {
                    return(PdfAcroFieldType.ListBox);
                }

            case "/Sig":
                return(PdfAcroFieldType.Signature);

            default:
                return(PdfAcroFieldType.Unknown);
            }
        }
Ejemplo n.º 2
0
            /// <summary>
            /// Create a derived type like PdfTextField or PdfCheckBox if possible.
            /// If the actual cannot be guessed by PDFsharp the function returns an instance
            /// of PdfGenericField.
            /// </summary>
            PdfAcroField CreateAcroField(PdfDictionary dict)
            {
                string            ft    = dict.Elements.GetName(Keys.FT);
                PdfAcroFieldFlags flags = (PdfAcroFieldFlags)dict.Elements.GetInteger(Keys.Ff);

                switch (ft)
                {
                case "/Btn":
                    if ((flags & PdfAcroFieldFlags.Pushbutton) != 0)
                    {
                        return(new PdfPushButtonField(dict));
                    }
                    else if ((flags & PdfAcroFieldFlags.Radio) != 0)
                    {
                        return(new PdfRadioButtonField(dict));
                    }
                    else
                    {
                        return(new PdfCheckBoxField(dict));
                    }

                case "/Tx":
                    return(new PdfTextField(dict));

                case "/Ch":
                    if ((flags & PdfAcroFieldFlags.Combo) != 0)
                    {
                        return(new PdfComboBoxField(dict));
                    }
                    else
                    {
                        return(new PdfListBoxField(dict));
                    }

                case "/Sig":
                    return(new PdfSignatureField(dict));

                default:
                    return(new PdfGenericField(dict));
                }
            }
Ejemplo n.º 3
0
            internal static PdfAcroField CheckBoxMaybeRadioButton(PdfDictionary dict, PdfAcroFieldFlags flags)
            {
                if ((flags & PdfAcroFieldFlags.Radio) != 0)             // explicitly given type
                {
                    return(new PdfRadioButtonField(dict));
                }
                if ((flags & PdfAcroFieldFlags.RadiosInUnison) != 0)    // this flag is only valid for radio buttons
                {
                    return(new PdfRadioButtonField(dict));
                }

                var radio          = new PdfRadioButtonField(dict);
                var distinctValues = new List <string>();

                foreach (var val in radio.FieldValues)
                {
                    if (!distinctValues.Contains(val))
                    {
                        distinctValues.Add(val);
                    }
                }
                // if the Annotations of this field have all different names, we consider this as a RadioButton
                if (distinctValues.Count == radio.FieldValues.Count && radio.FieldValues.Count > 1)
                {
                    return(radio);
                }
                return(new PdfCheckBoxField(dict));
            }