public FileAttachment GenerateCustomPrepopulatedForm(string formCode, IFormContentProvider prePop) { string fileName; byte[] bytes; GeneratePrePopulatedForm(formCode, out fileName, out bytes); bytes = SetFields(bytes, prePop); return(new FileAttachment(bytes, fileName, FormDefinition.pdfMimeType) { DispositionType = "inline" }); }
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()); }
private void GeneratePrePopulatedForm(string formCode, out string fileName, out byte[] bytes) { var formDef = FormRepository.FindFormDefinitionByCode(formCode); if (formDef == null) { throw new DomainException("No Form Definition exists for code: " + formCode); } fileName = formDef.FileName; bytes = formDef.FormContent; if (bytes == null) { throw new DomainException("Form Definition has no file content"); } if (formDef.PrePopulator != null) { IFormContentProvider prepop = (IFormContentProvider)Container.NewTransientInstance(formDef.PrePopulatorType()); bytes = SetFields(bytes, prepop); } }