/// <summary> /// enumerate each PdfAcroField, convert it's value to clr type, use reflection to set that value to the clr object /// BaseDoc /// </summary> /// <param name="DocData"></param> /// <param name="DocRevStrict"></param> /// <returns></returns> public override BaseDoc Read(byte[] DocData, bool DocRevStrict = false) { using (MemoryStream _MemoryStream = new MemoryStream(DocData)) using (PdfDocument _PdfDocument = PdfReader.Open(_MemoryStream, PdfDocumentOpenMode.ReadOnly)) { DocProcessingInstructions _DocProcessingInstructions = ReadDocPI(_PdfDocument); BaseDoc _BaseDoc = Runtime.ActivateBaseDoc( _DocProcessingInstructions.DocTypeName, DocRevStrict ? _DocProcessingInstructions.solutionVersion : TemplateController.Instance.TopDocRev(_DocProcessingInstructions.DocTypeName)); Type _BaseDocType = _BaseDoc.GetType(); for (int i = 0; i < _PdfDocument.AcroForm.Fields.Elements.Count; i++) { PdfAcroField _Field = _PdfDocument.AcroForm.Fields[i]; CompositeProperty _CompositeProperty = _Field.AsCompositeProperty(); string _Value = string.Format("{0}", _Field.Value); PropertyInfo _PropertyInfo = _BaseDocType.GetProperty(_CompositeProperty.Name, _CompositeProperty.PropertyType); _PropertyInfo.SetValue(_BaseDoc, Convert.ChangeType(_Value, _PropertyInfo.PropertyType), null); } return(SetPI(_BaseDoc, _DocProcessingInstructions)); } }
public BaseDoc Read(string DocJson, bool DocRevStrict = false) { string DocTypeName = ReadDocTypeName(DocJson); string DocRev = DocRevStrict ? ReadRevision(DocJson) : TemplateController.Instance.TopDocRev(DocTypeName); Type type = Runtime.ActivateBaseDoc(DocTypeName, DocRev).GetType(); BaseDoc o = (BaseDoc)JsonConvert.DeserializeObject(DocJson, type, PIInclusionSettings); o.solutionVersion = DocRev; return(o); }
/// <summary> /// </summary> /// <param name="DocData"></param> /// <param name="DocRevStrict"></param> /// <returns></returns> public BaseDoc Read(string DocData, bool DocRevStrict = false) { if (String.IsNullOrWhiteSpace(DocData)) { return(null); } string CollapsedElementsDocXml = CollapseDefaultValueElements(DocData), DocTypeName = ReadDocTypeName(DocData), DocRev = ReadRevision(DocData); BaseDoc dstBaseDoc = null; Type BaseDocType = Runtime.ActivateBaseDoc( DocTypeName, DocRevStrict ? DocRev : TemplateController.Instance.TopDocRev(DocTypeName)).GetType(); try { dstBaseDoc = XsdIntEgerFixDstBaseDocKnownTypes.Contains(BaseDocType) ? TryXsdIntEgerFixDstBaseDoc(DocRevStrict, DocTypeName, DocRev, CollapsedElementsDocXml, BaseDocType) : (BaseDoc)Serialization.ReadObject(CollapsedElementsDocXml, BaseDocType); //} catch (InvalidOperationException) } catch (Exception) { dstBaseDoc = TryXsdIntEgerFixDstBaseDoc(DocRevStrict, DocTypeName, DocRev, CollapsedElementsDocXml, BaseDocType); if (dstBaseDoc == null) { throw; } XsdIntEgerFixDstBaseDocKnownTypes.Add(dstBaseDoc.GetType()); } dstBaseDoc = (BaseDoc)PropertyOverlay.Overlay(ReadDocPI(CollapsedElementsDocXml), dstBaseDoc); return(dstBaseDoc); }