/// <summary> /// Set font family and font size on all text fields for consistency /// </summary> /// <param name="stamperFields"> /// PdfStamper.AcroFields - so we can set the form field value here. /// </param> /// <param name="family">BaseFont</param> /// <param name="size">Desired size</param> public static void SetTemplateFont(AcroFields stamperFields, BaseFont family, float size) { // ignore everything except text fields var textFields = stamperFields.Fields.Keys .Where(x => stamperFields.GetFieldType(x) == AcroFields.FIELD_TYPE_TEXT && GetFontSize(stamperFields, x) != 0f ) .ToDictionary(k => k); Console.WriteLine(string.Join(" :: ", textFields.Keys.ToArray())); foreach (var key in textFields.Keys) { stamperFields.SetFieldProperty(key, "textfont", family, null); stamperFields.SetFieldProperty(key, "textsize", size, null); } }
internal AcroFields GetAcroFields() { if (acroFields == null) { acroFields = new AcroFields(reader, this); try { foreach (String key in acroFields.Fields.Keys) { if (AcroFields.FIELD_TYPE_TEXT != acroFields.GetFieldType(key)) continue; String value = acroFields.GetField(key).Trim(); if (value.Length > 0) { acroFields.SetField(key, value, value); } } } catch (DocumentException) { } catch (IOException) { } } return acroFields; }
/// <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 }
private void ValidateFitSingleLineText(AcroFields acroFields, string fieldName) { if (acroFields.GetFieldType(fieldName) != AcroFields.FIELD_TYPE_TEXT) { throw new InvalidOperationException(string.Format( "field [{0}] is not a TextField", fieldName )); } if (IsMultiLine(acroFields, fieldName)) { throw new InvalidOperationException(string.Format( "only single line TextField is allowed; field [{0}] is multiline.", fieldName )); } }