// --------------------------------------------------------------------------- /** * 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()); } }
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 }); }
// --------------------------------------------------------------------------- /** * 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); }
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 }
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); }
/// <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; } } }
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(); } }