示例#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)) {
                    stamper.Writer.AddJavaScript(File.ReadAllText(RESOURCE));
                    AcroFields      form = stamper.AcroFields;
                    AcroFields.Item fd   = form.GetFieldItem("married");

                    PdfDictionary dictYes =
                        (PdfDictionary)PdfReader.GetPdfObject(fd.GetWidgetRef(0));
                    PdfDictionary yesAction = dictYes.GetAsDict(PdfName.AA);
                    if (yesAction == null)
                    {
                        yesAction = new PdfDictionary();
                    }
                    yesAction.Put(
                        new PdfName("Fo"),
                        PdfAction.JavaScript("ReadOnly = false);", stamper.Writer)
                        );
                    dictYes.Put(PdfName.AA, yesAction);

                    PdfDictionary dictNo =
                        (PdfDictionary)PdfReader.GetPdfObject(fd.GetWidgetRef(1));
                    PdfDictionary noAction = dictNo.GetAsDict(PdfName.AA);
                    if (noAction == null)
                    {
                        noAction = new PdfDictionary();
                    }
                    noAction.Put(
                        new PdfName("Fo"),
                        PdfAction.JavaScript("ReadOnly = true);", stamper.Writer)
                        );
                    dictNo.Put(PdfName.AA, noAction);

                    PdfWriter       writer = stamper.Writer;
                    PushbuttonField button = new PushbuttonField(
                        writer, new Rectangle(40, 690, 200, 710), "submit"
                        );
                    button.Text    = "validate and submit";
                    button.Options = PushbuttonField.VISIBLE_BUT_DOES_NOT_PRINT;
                    PdfFormField validateAndSubmit = button.Field;
                    validateAndSubmit.Action = PdfAction.JavaScript(
                        "validate();", stamper.Writer
                        );
                    stamper.AddAnnotation(validateAndSubmit, 1);
                }
                return(ms.ToArray());
            }
        }
示例#2
0
        public static TextProperties GetTextProperties(this AcroFields pdfForm, string acroFieldName)
        {
            AcroFields.Item acroField = pdfForm.GetFieldItem(acroFieldName);
            PdfDictionary   merged    = acroField.GetMerged(0);
            TextField       textField = new TextField(null, null, null);

            pdfForm.DecodeGenericDictionary(merged, textField);

            return(new TextProperties {
                FontName = textField.Font.With(x => x.FullFontName[0][3]),
                FontSize = textField.FontSize,
                Alignment = textField.Alignment
            });
        }
示例#3
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);
            AcroFields form   = reader.AcroFields;

            AcroFields.Item item   = form.GetFieldItem("post");
            PdfDictionary   field  = item.GetMerged(0);
            PdfDictionary   action = field.GetAsDict(PdfName.A);
            PdfDictionary   f      = action.GetAsDict(PdfName.F);

            f.Put(PdfName.F, new PdfString("http://NON-EXISTENT-DOMAIN.invalid/"));
            using (MemoryStream ms = new MemoryStream()) {
                using (PdfStamper stamper = new PdfStamper(reader, ms)) {
                }
                return(ms.ToArray());
            }
        }
        Queue <Tuple <string, string, string> > Fill109Rows(IEnumerable <MissionLog> logs, AcroFields fields, string fieldName)
        {
            AcroFields.Item item      = fields.GetFieldItem(fieldName);
            PdfDictionary   merged    = item.GetMerged(0);
            TextField       textField = new TextField(null, null, null);

            fields.DecodeGenericDictionary(merged, textField);

            var   collection = new Queue <Tuple <string, string, string> >();
            float fieldWidth = fields.GetFieldPositions(fieldName)[0].position.Width;
            float padRight   = textField.Font.GetWidthPoint("m", textField.FontSize);

            foreach (var log in logs)
            {
                if (log.Data == null)
                {
                    continue;
                }

                string formTime     = log.Time.ToString("HHmm");
                string formOperator = (log.Person ?? new Member()).LastName;

                foreach (var logMsg in log.Data.Replace("\r", "").Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    int left  = 0;
                    int right = logMsg.Length - 1;

                    while (left < right)
                    {
                        string part = logMsg.Substring(left, right - left + 1);
                        while (left < right && (textField.Font.GetWidthPoint(part, textField.FontSize) + padRight) > fieldWidth)
                        {
                            right = left + part.LastIndexOf(' ');
                            part  = logMsg.Substring(left, right - left);
                        }
                        collection.Enqueue(new Tuple <string, string, string>(formTime, part, formOperator));
                        formTime = "";
                        left     = right;
                        right    = logMsg.Length - 1;
                    }
                }
            }

            return(collection);
        }
示例#5
0
 public static bool FillInForm(Stream source, Stream dest, Dictionary <string, string> Keys)
 {
     try
     {
         using (PdfReader reader = new PdfReader(source))
             using (PdfStamper stamper = new PdfStamper(reader, dest))
             {
                 AcroFields form = stamper.AcroFields;
                 foreach (var i in Keys)
                 {
                     Item item = form.GetFieldItem(i.Key);
                     form.SetField(i.Key, i.Value);
                 }
             }
         return(true);
     }
     catch { return(false); }
 }
        /// <summary>
        /// Get text field font size
        /// </summary>
        /// <param name="acroFields">AcroFields</param>
        /// <param name="fieldName">Text field name</param>
        /// <returns>text field font size</returns>
        public static float GetFontSize(AcroFields acroFields, string fieldName)
        {
            if (acroFields.GetFieldType(fieldName) == AcroFields.FIELD_TYPE_TEXT)
            {
                // need the dictionary field appearance
                var pdfDictionary = acroFields.GetFieldItem(fieldName).GetMerged(0);
                var pdfString     = pdfDictionary.GetAsString(PdfName.DA);
                if (pdfString != null)
                {
                    var daNames = AcroFields.SplitDAelements(pdfString.ToString());

                    float size;
                    return(daNames[1] != null &&
                           Single.TryParse(daNames[1].ToString(), out size)
                        ? size : 0f);
                }
            }

            return(0f); // text field auto-sized font
        }
示例#7
0
        protected internal void UpdateCalculationOrder(PdfReader reader)
        {
            PdfDictionary catalog = reader.Catalog;
            PdfDictionary acro    = catalog.GetAsDict(PdfName.ACROFORM);

            if (acro == null)
            {
                return;
            }
            PdfArray co = acro.GetAsArray(PdfName.CO);

            if (co == null || co.Size == 0)
            {
                return;
            }
            AcroFields af = reader.AcroFields;

            for (int k = 0; k < co.Size; ++k)
            {
                PdfObject obj = co[k];
                if (obj == null || !obj.IsIndirect())
                {
                    continue;
                }
                String name = GetCOName(reader, (PRIndirectReference)obj);
                if (af.GetFieldItem(name) == null)
                {
                    continue;
                }
                name = "." + name;
                if (calculationOrder.Contains(name))
                {
                    continue;
                }
                calculationOrder.Add(name);
            }
        }
        /// <summary>
        /// Get a Standard Type 1 (14) font from a text field
        /// </summary>
        /// <param name="acroFields">AcroFields</param>
        /// <param name="fieldName">Text field name</param>
        /// <returns>
        /// Standard Type 1 (14) font if possible, or BaseFont.HELVETICA
        /// </returns>
        public static BaseFont GetStandardFont(AcroFields acroFields, string fieldName)
        {
            var baseFont = BaseFont.CreateFont();

            try
            {
                var item          = acroFields.GetFieldItem(fieldName);
                var pdfDictionary = item.GetMerged(0);
                var textField     = new TextField(null, null, null);
                acroFields.DecodeGenericDictionary(pdfDictionary, textField);
                baseFont = BaseFont.CreateFont(
                    // keep next line for reference: Google and StackOverflow aren't always right...
                    // textField.Font.FullFontName[0][3],
                    textField.Font.PostscriptFontName,
                    BaseFont.WINANSI,
                    false
                    );
            }
            catch
            {
                // iTextSharp.text.DocumentException, but we don't care
            }
            return(baseFont);
        }
示例#9
0
        /// <summary>
        /// Handles the Click event of the BtnGenerateReport control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void BtnGenerateReport_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtPDFFile.Text))
            {
                _formFields.Clear();

                try
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (FileStream fs = File.OpenRead(txtPDFFile.Text))
                        {
                            fs.CopyTo(ms);
                        }

                        PdfReader.unethicalreading = true;
                        PdfReader  pdfReader     = new PdfReader(ms.ToArray());
                        AcroFields pdfFormFields = pdfReader.AcroFields;

                        foreach (KeyValuePair <string, AcroFields.Item> kvp in pdfFormFields.Fields)
                        {
                            FormField formField = new FormField
                            {
                                FieldName  = pdfFormFields.GetTranslatedFieldName(kvp.Key),
                                FieldValue = pdfFormFields.GetField(kvp.Key),
                                FieldType  = GetFormFieldType(pdfFormFields.GetFieldType(kvp.Key))
                            };

                            AcroFields.Item field  = pdfFormFields.GetFieldItem(kvp.Key);
                            PdfDictionary   merged = field.GetMerged(0);
                            TextField       fld    = new TextField(null, null, null);
                            pdfFormFields.DecodeGenericDictionary(merged, fld);

                            formField.FontName = GetFontName(fld.Font);
                            string fontSize = (fld.FontSize == 0.0f) ? "Auto" : fld.FontSize.ToString();
                            formField.FontSize = fontSize;

                            List <AcroFields.FieldPosition> fieldPositions = pdfFormFields.GetFieldPositions(kvp.Key).ToList();
                            float pageHeight = pdfReader.GetPageSizeWithRotation(fieldPositions[0].page).Height;
                            formField.FieldPositionTop    = (pageHeight - fieldPositions[0].position.Top);
                            formField.FieldPositionBottom = (pageHeight - fieldPositions[0].position.Bottom);
                            formField.FieldPositionLeft   = fieldPositions[0].position.Left;
                            formField.FieldPositionRight  = fieldPositions[0].position.Right;
                            formField.FieldHeight         = fieldPositions[0].position.Height;
                            formField.FieldWidth          = fieldPositions[0].position.Width;
                            formField.PageNumber          = fieldPositions[0].page;

                            _formFields.Add(formField);
                        }

                        GenerateTreeViewDisplay();
                        pnlSaveOptions.Enabled = true;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("There was an issue with processing the request. Message: \n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    pnlSaveOptions.Enabled = pnlSaveOptions.Enabled ? true : false;
                }
            }
        }
示例#10
0
        public void SetEvisaArabicFieldValue(string fieldName, string fieldValue)
        {
            try
            {
                _reader       = new PdfReader(fileName);
                pdfFormFields = _reader.AcroFields;
                var field = pdfFormFields.GetFieldItem(fieldName).GetValue(0);
                Console.WriteLine(field.ToString());
                var outfileName = fileName.Replace(".pdf", DateTime.Now.Ticks + ".pdf");
                _pdfStamper = new PdfStamper(_reader, new FileStream(outfileName, FileMode.Create));

                var ARIALUNI_TFF =
                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "trado.TTF");
                var bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                var f  = new iTextSharp.text.Font(bf);

                var overContent   = _pdfStamper.GetOverContent(1); //1 means page 1
                var fieldPosition = pdfFormFields.GetFieldPositions(fieldName)[0].position;

                var ct = new ColumnText(overContent)
                {
                    RunDirection = PdfWriter.RUN_DIRECTION_RTL, YLine = 5
                };
                if (rdCenter.Checked)
                {
                    ct.SetSimpleColumn(fieldPosition.Left, fieldPosition.Bottom - fieldPosition.Height / 2,
                                       fieldPosition.Right, fieldPosition.Top - fieldPosition.Height / 2, 0, Element.ALIGN_CENTER);
                }
                else if (rdRight.Checked)
                {
                    ct.SetSimpleColumn(fieldPosition.Left, fieldPosition.Bottom - fieldPosition.Height / 2,
                                       fieldPosition.Right, fieldPosition.Top - fieldPosition.Height / 2, 0, Element.ALIGN_RIGHT);
                }
                if (rdLeft.Checked)
                {
                    ct.SetSimpleColumn(fieldPosition.Left, fieldPosition.Bottom - fieldPosition.Height / 2,
                                       fieldPosition.Right, fieldPosition.Top - fieldPosition.Height / 2, 0, Element.ALIGN_LEFT);
                }
                if (rdUseFieldAlignment.Checked)
                {
                    ct.SetSimpleColumn(fieldPosition.Left, fieldPosition.Bottom - fieldPosition.Height / 2,
                                       fieldPosition.Right, fieldPosition.Top - fieldPosition.Height / 2, 0, Element.ALIGN_LEFT);
                }

                ct.SetText(new Phrase(fieldValue, f));
                ct.Go();

                //uncomment to draw rectangle
                //var rect = new iTextSharp.text.Rectangle(fieldPosition.Left, fieldPosition.Bottom - fieldPosition.Height / 2, fieldPosition.Right, fieldPosition.Top - fieldPosition.Height / 2);
                //rect.Border = iTextSharp.text.Rectangle.LEFT_BORDER | iTextSharp.text.Rectangle.RIGHT_BORDER;
                //rect.BorderWidth = 5;
                //rect.BorderColor = new BaseColor(0, 0, 0);

                //overContent.Rectangle(rect);
                _pdfStamper.Close();
                Process.Start(outfileName);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }