public async Task <ParsingResult> Parse(ParsingRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            logger.LogDebug("Parsing [{0}]", request.File.FullName);
            using (var documentProcessor = new RichEditDocumentServer())
            {
                documentProcessor.LayoutCalculationMode = CalculationModeType.Automatic;
                documentProcessor.LayoutUnit            = DocumentLayoutUnit.Document;
                var loaded = Observable.FromEventPattern <EventHandler, EventArgs>(
                    h => documentProcessor.DocumentLayout.DocumentFormatted += h,
                    h => documentProcessor.DocumentLayout.DocumentFormatted -= h)
                             .FirstOrDefaultAsync()
                             .GetAwaiter();

                documentProcessor.LoadDocument(request.File.FullName);
                await loaded;

                var iterator   = new DocumentIterator(documentProcessor.Document);
                var pageLayout = new CurrentLayoutVisitor();
                var visitor    = new DocumentVisitor(pageLayout);

                var layoutIterator = new LayoutIterator(documentProcessor.DocumentLayout);
                while (layoutIterator.MoveNext(LayoutLevel.Page))
                {
                    layoutIterator.Current.Accept(pageLayout);
                }

                while (iterator.MoveNext())
                {
                    iterator.Current.Accept(visitor);
                }

                return(new ParsingResult(visitor.GenerateResult(request.MaxPages), request, ParsingType.Extract));
            }
        }
예제 #2
0
 public DocumentVisitor(CurrentLayoutVisitor layoutVisitor)
 {
     this.layoutVisitor = layoutVisitor;
     VisitPage();
 }