Example #1
0
// ---------------------------------------------------------------------------

        /**
         * Manipulates a PDF file src with the file dest as result
         * @param src the original PDF
         */
        public byte[] ManipulatePdf(byte[] src)
        {
            PdfReader reader = new PdfReader(src);

            using (MemoryStream ms = new MemoryStream()) {
                using (PdfStamper stamper = new PdfStamper(reader, ms)) {
                    AcroFields form = stamper.AcroFields;
                    form.SetField("choice_1", "NL");
                    form.SetListSelection("choice_2", new String[] { "German", "Spanish" });
                    String[] languages        = form.GetListOptionDisplay("choice_3");
                    String[] exportvalues     = form.GetListOptionExport("choice_3");
                    int      n                = languages.Length;
                    String[] new_languages    = new String[n + 2];
                    String[] new_exportvalues = new String[n + 2];
                    for (int i = 0; i < n; i++)
                    {
                        new_languages[i]    = languages[i];
                        new_exportvalues[i] = exportvalues[i];
                    }
                    new_languages[n]        = "Chinese";
                    new_exportvalues[n]     = "CN";
                    new_languages[n + 1]    = "Japanese";
                    new_exportvalues[n + 1] = "JP";
                    form.SetListOption("choice_3", new_exportvalues, new_languages);
                    form.SetField("choice_3", "CN");
                    form.SetField("choice_4", "Japanese");
                }
                return(ms.ToArray());
            }
        }
        public static byte[] SetFields(byte[] pdfFile, IFormContentProvider contentProvider)
        {
            var        pr   = new PdfReader(pdfFile);
            var        ims  = new MemoryStream();
            var        ps   = new PdfStamper(pr, ims);
            AcroFields flds = ps.AcroFields;

            foreach (DictionaryEntry entry in flds.Fields)
            {
                string fieldName = entry.Key.ToString();
                var    type      = (FieldTypes)flds.GetFieldType(fieldName);
                switch (type)
                {
                case FieldTypes.Text:
                    string value   = null;
                    string display = null;
                    contentProvider.PopulateTextField(fieldName, out value, out display);
                    if (value != null)
                    {
                        flds.SetField(fieldName, value);
                    }
                    break;

                case FieldTypes.List:
                    string[] exportValues  = null;
                    string[] displayValues = null;
                    string[] selected      = null;
                    contentProvider.PopulateListField(fieldName, out exportValues, out displayValues, out selected);
                    if (exportValues != null)
                    {
                        flds.SetListOption(fieldName, exportValues, displayValues);
                    }
                    if (selected != null)
                    {
                        flds.SetListSelection(fieldName, selected);
                    }
                    break;

                default:
                    break;
                }
            }
            ps.Close();
            return(ims.ToArray());
        }