// ---------------------------------------------------------------------------

        /**
         * Renames the fields in an interactive form.
         * @param datasheet the path to the original form
         * @param i a number that needs to be appended to the field names
         * @return a byte[] containing an altered PDF file
         */
        private static byte[] RenameFieldsIn(string datasheet, int i)
        {
            List <string> form_keys = new List <string>();

            using (var ms = new MemoryStream())
            {
                PdfReader reader = new PdfReader(datasheet);
                // Create the stamper
                using (PdfStamper stamper = new PdfStamper(reader, ms))
                {
                    // Get the fields
                    AcroFields form = stamper.AcroFields;
                    // so we aren't hit with 'Collection was modified' exception
                    foreach (string k in stamper.AcroFields.Fields.Keys)
                    {
                        form_keys.Add(k);
                    }
                    // Loop over the fields
                    foreach (string key in form_keys)
                    {
                        // rename the fields
                        form.RenameField(key, string.Format("{0}_{1}", key, i));
                    }
                }
                reader.Close();
                return(ms.ToArray());
            }
        }
Example #2
0
        private int AppendAdditionalStatements(HealthStatements myStatements, int index, int StatementCount, int page)
        {
            PdfReader     myPDFReader     = new PdfReader(pdfTemplate + "AddMedAns.pdf");
            ByteBuffer    myPDFAddTemp    = new ByteBuffer();
            ByteBuffer    myPDFAdd        = new ByteBuffer();
            PdfStamper    mypdfStamper    = new PdfStamper(myPDFReader, myPDFAddTemp);
            AcroFields    mypdfFormFields = mypdfStamper.AcroFields;
            List <string> myKeys          = new List <string>();

            //Store Keys
            foreach (DictionaryEntry pf in mypdfFormFields.Fields)
            {
                myKeys.Add(pf.Key.ToString());
            }

            //Rename Fields
            foreach (string k in myKeys)
            {
                if (!k.Contains("SignaturePort") && !k.Contains("appdate"))
                {
                    mypdfFormFields.RenameField(k, k.Replace("[", "").Replace("]", "") + "_" + page.ToString());
                }
            }

            //close stamper and reader to apply changes
            myPDFReader.Close();
            mypdfStamper.Close();

            //Create new reader and stamper using pdf with new fields (myPDFAddTemp)
            myPDFReader     = new PdfReader(myPDFAddTemp.Buffer);
            mypdfStamper    = new PdfStamper(myPDFReader, myPDFAdd);
            mypdfFormFields = mypdfStamper.AcroFields;

            int i = 1;

            while (i <= 9 && index < StatementCount)
            {
                HealthStatement statement = myStatements.MyHealthStatements[index];
                mypdfFormFields.SetField("Row" + i + "0" + "_" + page.ToString(), statement.QuestionNum);
                mypdfFormFields.SetField("Row" + i + "1" + "_" + page.ToString(), statement.Name);
                mypdfFormFields.SetField("Row" + i + "2" + "_" + page.ToString(), statement.Condition);
                mypdfFormFields.SetField("Row" + i + "3" + "_" + page.ToString(), statement.DateDiagnosed);
                mypdfFormFields.SetField("Row" + i + "4" + "_" + page.ToString(), statement.DateLastTreated);
                mypdfFormFields.SetField("Row" + i + "5" + "_" + page.ToString(), statement.TreatmentType);
                mypdfFormFields.SetField("Row" + i + "6" + "_" + page.ToString(), statement.IsMedication ? "Yes" : "No");
                mypdfFormFields.SetField("Row" + i + "7" + "_" + page.ToString(), statement.Recovery);

                i++;
                index++;
            }

            myPDFReader.Close();
            mypdfStamper.Close();
            additionalHealthAnswers.Add(myPDFAdd);

            return(index);
        }
Example #3
0
        public static void multiplePage()
        {
            List <Byte[]> result = new List <byte[]>();

            for (int i = 1; i <= 2; i++)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    PdfReader  pdfReader  = new PdfReader(templateFile);
                    PdfStamper pdfStamper = new PdfStamper(pdfReader, ms);

                    AcroFields    pdfFormFields = pdfStamper.AcroFields;
                    List <String> keys          = new List <String>(pdfFormFields.Fields.Keys);
                    foreach (var key in keys)
                    {
                        // rename the fields
                        pdfFormFields.RenameField(key, String.Format("{0}_{1}", key, i));
                    }
                    pdfFormFields.AddSubstitutionFont(BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED));

                    pdfFormFields.SetField("Radio Button1_" + i, "1");
                    pdfFormFields.SetField("Check Box101_" + i, "是");
                    pdfFormFields.SetField("Currency_" + i, "是");
                    //String[] values = pdfFormFields.GetAppearanceStates("Check Box101");
                    //foreach (String value in values) {
                    //	Console.WriteLine("values=" + value);
                    //}
                    pdfFormFields.SetField("Text21_" + i, "(" + i + ")聖島國際專利商標聯合事務所");
                    pdfFormFields.SetField("Text74_" + i, "台北市松山區南京東路三段248號11樓之1");

                    pdfStamper.Writer.CloseStream = false;
                    //pdfStamper.FormFlattening = true;//平面化

                    pdfStamper.Close();
                    pdfReader.Close();

                    result.Add(ms.ToArray());
                }
            }

            MemoryStream outStream = new MemoryStream();

            outStream = MergePdfForms(result);

            System.IO.File.WriteAllBytes(outputFile, outStream.ToArray());
        }
Example #4
0
// ---------------------------------------------------------------------------
        public byte[] ManipulatePdf(byte[] src, Dictionary <string, TextField> cache,
                                    string name, string login)
        {
            using (MemoryStream ms = new MemoryStream()) {
                PdfReader reader = new PdfReader(src);
                using (PdfStamper stamper = new PdfStamper(reader, ms)) {
                    AcroFields form = stamper.AcroFields;
                    form.FieldCache = cache;
                    form.SetExtraMargin(2, 0);
                    form.RemoveField("personal.password");
                    form.SetField("personal.name", name);
                    form.SetField("personal.loginname", login);
                    form.RenameField("personal.reason", "personal.motivation");
                    form.SetFieldProperty(
                        "personal.loginname", "setfflags", TextField.READ_ONLY, null
                        );
                    stamper.FormFlattening = true;
                    stamper.PartialFormFlattening("personal.name");
                }
                return(ms.ToArray());
            }
        }