Пример #1
0
        /// <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));
                }
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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);
        }