Пример #1
0
        private Rect CheckPageConstraint(SearchConstraint constraint, Rect currentRect)
        {
            var  rectToCheck = _currentPage.Bound;
            Rect result      = RestrictArea(rectToCheck, constraint);

            return(Rect.Intersect(currentRect, result));
        }
Пример #2
0
        public static DocClass Bupa()
        {
            var result      = new DocClass("BupaTest", 4);
            var stBupaArab  = new StaticTextRule("BupaArab", RuleBinding.Required);
            var firstConstr = new SearchConstraint().Page().Above().YCenter();

            stBupaArab.TextToSearch = "Bupa Arabia";
            //var firstConstr = (new SearchConstraint()).Page().Above.XCenter;
            stBupaArab.SearchConstraints.Add(firstConstr);
            result.AddHeaderRule(stBupaArab);
            return(result);
        }
Пример #3
0
        public static DocClass Act()
        {
            var result = new DocClass("Act", 1);
            var stAct  = new StaticTextRule("ActHead", RuleBinding.Required);

            stAct.TextToSearch = "Акт";
            var actBot   = new SearchConstraint().Page().Above().GetX(0.3);
            var actRight = new SearchConstraint().Page().LeftOf().GetY(0.2);;

            stAct.SearchConstraints.Add(actBot);
            stAct.SearchConstraints.Add(actRight);
            result.AddHeaderRule(stAct);
            ActAddActData(result);
            return(result);
        }
Пример #4
0
        private Rect CheckRuleConstraint(SearchConstraint constraint, Rect currentRect)
        {
            //throw new NotImplementedException();
            var ruleName = constraint.RuleTitle;
            var rule     = _ruleToCheck.Parent.FirstOrDefault(r => r.Title == ruleName);

            if (rule == null)
            {
                throw new Exception($"Can not find rule {ruleName}");
            }
            if (rule.SearchResult == null)
            {
                throw new Exception("Wrong rules sequence!!!");
            }
            var rectToCheck = new Rect();

            if (rule.SearchResult.IsFound)
            {
                rectToCheck = rule.SearchResult.Area;
                var strctedRect = RestrictArea(rectToCheck, constraint);
                currentRect = Rect.Intersect(currentRect, strctedRect);
            }
            return(currentRect);
        }
Пример #5
0
        private Rect RestrictArea(Rect rectToCheck, SearchConstraint constraint)
        {
            double dependencyCoord = 0;

            switch (constraint.RelationType)
            {
            case SearchRules.ConstraintsAdd.RelationTypes.Left:
                dependencyCoord = rectToCheck.Left;
                break;

            case SearchRules.ConstraintsAdd.RelationTypes.Top:
                dependencyCoord = rectToCheck.Top;
                break;

            case SearchRules.ConstraintsAdd.RelationTypes.Right:
                dependencyCoord = rectToCheck.Right;
                break;

            case SearchRules.ConstraintsAdd.RelationTypes.Bot:
                dependencyCoord = rectToCheck.Bottom;
                break;

            case SearchRules.ConstraintsAdd.RelationTypes.XCenter:
                dependencyCoord = rectToCheck.X + rectToCheck.Width / 2;
                break;

            case SearchRules.ConstraintsAdd.RelationTypes.YCenter:
                dependencyCoord = rectToCheck.Y + rectToCheck.Height / 2;
                break;
                //case SearchRules.ConstraintsAdd.RelationTypes.None:
                //    dependencyCoord = -1;
                //    break;
                //default:
                //    dependencyCoord = -1;
                //    break;
            }
            if (constraint.XOffset != 0.0)
            {
                dependencyCoord += rectToCheck.Height * constraint.XOffset;
            }
            if (constraint.YOffset != 0.0)
            {
                dependencyCoord += rectToCheck.Width * constraint.YOffset;
            }
            if (dependencyCoord < 0)
            {
                return(rectToCheck);
            }
            var result = _currentPage.Bound;

            switch (constraint.ConstraintType)
            {
            case SearchRules.ConstraintsAdd.ConstraintTypes.RightOf:
                result.X = dependencyCoord;
                break;

            case SearchRules.ConstraintsAdd.ConstraintTypes.LeftOf:
                result.Width = dependencyCoord;
                break;

            case SearchRules.ConstraintsAdd.ConstraintTypes.Below:
                result.Y = dependencyCoord;
                break;

            case SearchRules.ConstraintsAdd.ConstraintTypes.Above:
                result.Height = dependencyCoord;
                break;

            case SearchRules.ConstraintsAdd.ConstraintTypes.None:
                break;

            default:
                break;
            }
            return(result);
        }
Пример #6
0
        public static void ActAddActData(DocClass docClass)
        {
            var stAct = new StaticTextRule("Act", RuleBinding.Required);

            stAct.TextToSearch = "Акт";
            var actBot   = new SearchConstraint().Page().Above().GetX(0.3);
            var actRight = new SearchConstraint().Page().LeftOf().GetY(0.2);

            stAct.SearchConstraints.Add(actBot);
            stAct.SearchConstraints.Add(actRight);
            docClass.AddDataRule(stAct);

            var stOt = new StaticTextRule("ot", RuleBinding.Required);

            stOt.TextToSearch = "от";
            var otBot   = new SearchConstraint().Above().Rule("Act").Bot().GetX(1);
            var otTop   = new SearchConstraint().Below().Rule("Act").Top().GetX(-1);
            var otLeft  = new SearchConstraint().RightOf().Rule("Act").Right().GetY(1);
            var otRight = new SearchConstraint().LeftOf().Rule("Act").Right().GetY(3);

            stOt.SearchConstraints.Add(otBot);
            stOt.SearchConstraints.Add(otRight);
            stOt.SearchConstraints.Add(otTop);
            stOt.SearchConstraints.Add(otLeft);
            docClass.AddDataRule(stOt);

            var csNum = new CharacterStringRule("ActNumber", RuleBinding.Required);

            csNum.TextToSearch = @"\d{1,5}";
            var numBot   = new SearchConstraint().Above().Rule("Act").Bot().GetX(1);
            var numTop   = new SearchConstraint().Below().Rule("Act").Top().GetX(-1);
            var numLeft  = new SearchConstraint().RightOf().Rule("Act").Right();
            var numRight = new SearchConstraint().LeftOf().Rule("ot").Left();

            csNum.SearchConstraints.Add(numBot);
            csNum.SearchConstraints.Add(numTop);
            csNum.SearchConstraints.Add(numLeft);
            csNum.SearchConstraints.Add(numRight);
            docClass.AddDataRule(csNum);

            var csDate = new CharacterStringRule("ActDate", RuleBinding.Required);

            csDate.TextToSearch = @"[\dа-яА-Я\s\.]+";
            var dateBot  = new SearchConstraint().Above().Rule("ot").Bot().GetX(1);
            var dateTop  = new SearchConstraint().Below().Rule("ot").Top().GetX(-1);
            var dateLeft = new SearchConstraint().RightOf().Rule("ot").Right().GetX(0.1);

            csDate.SearchConstraints.Add(dateBot);
            csDate.SearchConstraints.Add(dateTop);
            csDate.SearchConstraints.Add(dateLeft);
            docClass.AddDataRule(csDate);

            var stExecutor = new StaticTextRule("Исполнитель", RuleBinding.Required);

            stExecutor.TextToSearch = "Исполнитель";
            var execBot   = new SearchConstraint().Page().Above().GetX(0.3);
            var execRight = new SearchConstraint().Page().LeftOf().GetY(0.2);

            stExecutor.SearchConstraints.Add(execBot);
            stExecutor.SearchConstraints.Add(execRight);
            docClass.AddDataRule(stExecutor);

            var stVendor = new StaticTextRule("Заказчик", RuleBinding.Required);

            stVendor.TextToSearch = "Заказчик";
            var vendBot   = new SearchConstraint().Page().Above().GetX(0.3);
            var vendRight = new SearchConstraint().Page().LeftOf().GetY(0.2);
            var vendTop   = new SearchConstraint().Rule("Исполнитель").Below().GetX(1);

            stVendor.SearchConstraints.Add(vendBot);
            stVendor.SearchConstraints.Add(vendRight);
            stVendor.SearchConstraints.Add(vendTop);
            docClass.AddDataRule(stVendor);

            var stExeInn = new StaticTextRule("ИспИНН", RuleBinding.Required);

            stExeInn.TextToSearch = "ИНН";
            var eInnTop  = new SearchConstraint().Rule("Исполнитель").Below().Top().GetX(-3);
            var eInnLeft = new SearchConstraint().Rule("Исполнитель").RightOf().Right();
            var eInnBot  = new SearchConstraint().Rule("Исполнитель").Above().Bot().GetX(2.5);

            stExeInn.SearchConstraints.Add(eInnTop);
            stExeInn.SearchConstraints.Add(eInnLeft);
            stExeInn.SearchConstraints.Add(eInnBot);
            docClass.AddDataRule(stExeInn);

            var stVendInn = new StaticTextRule("ЗакИНН", RuleBinding.Required);

            stVendInn.TextToSearch = "ИНН";
            var vInnTop  = new SearchConstraint().Rule("Заказчик").Below().Top().GetX(-3);
            var vInnLeft = new SearchConstraint().Rule("Заказчик").RightOf().Right();
            var vInnBot  = new SearchConstraint().Rule("Заказчик").Above().Bot().GetX(2.5);

            stVendInn.SearchConstraints.Add(vInnTop);
            stVendInn.SearchConstraints.Add(vInnLeft);
            stVendInn.SearchConstraints.Add(vInnBot);
            docClass.AddDataRule(stVendInn);

            var csExecName = new CharacterStringRule("Наименование исполнителя", RuleBinding.Required);

            csExecName.TextToSearch = @".+";
            var ENBot   = new SearchConstraint().Above().Rule("ИспИНН").Bot().GetX(0.3);
            var ENTop   = new SearchConstraint().Below().Rule("ИспИНН").Top().GetX(-0.3);
            var ENLeft  = new SearchConstraint().RightOf().Rule("Исполнитель").Right();
            var ENRight = new SearchConstraint().LeftOf().Rule("ИспИНН").Left().GetX(-0.2);
            var ENTop2  = new SearchConstraint().Rule("Исполнитель").Below().Top().GetX(-3);
            var ENBot2  = new SearchConstraint().Rule("Заказчик").Above().Top().GetX(1);

            csExecName.SearchConstraints.Add(ENBot);
            csExecName.SearchConstraints.Add(ENTop);
            csExecName.SearchConstraints.Add(ENLeft);
            csExecName.SearchConstraints.Add(ENRight);
            csExecName.SearchConstraints.Add(ENTop2);
            csExecName.SearchConstraints.Add(ENBot2);
            docClass.AddDataRule(csExecName);

            var csVendName = new CharacterStringRule("Наименование заказчика", RuleBinding.Required);

            csVendName.TextToSearch = @".+";
            var VNBot   = new SearchConstraint().Above().Rule("ЗакИНН").Bot().GetX(0.3);
            var VNTop   = new SearchConstraint().Below().Rule("ЗакИНН").Top().GetX(-0.3);
            var VNLeft  = new SearchConstraint().RightOf().Rule("Заказчик").Right();
            var VNRight = new SearchConstraint().LeftOf().Rule("ЗакИНН").Left().GetX(-0.2);
            var VNTop2  = new SearchConstraint().Rule("Исполнитель").Below().Bot().GetX(0.5);
            var VNBot2  = new SearchConstraint().Rule("Заказчик").Above().Bot().GetX(1.5);

            csVendName.SearchConstraints.Add(VNBot);
            csVendName.SearchConstraints.Add(VNTop);
            csVendName.SearchConstraints.Add(VNLeft);
            csVendName.SearchConstraints.Add(VNRight);
            csVendName.SearchConstraints.Add(VNTop2);
            csVendName.SearchConstraints.Add(VNBot2);
            docClass.AddDataRule(csVendName);

            var csEInn = new CharacterStringRule("ИНН исполнителя", RuleBinding.Required);

            csEInn.TextToSearch = @"\d{9,12}";
            var EIBot   = new SearchConstraint().Above().Rule("ИспИНН").Bot().GetX(0.3);
            var EITop   = new SearchConstraint().Below().Rule("ИспИНН").Top().GetX(-0.3);
            var EILeft  = new SearchConstraint().RightOf().Rule("ИспИНН").Right();
            var EIRight = new SearchConstraint().LeftOf().Rule("ИспИНН").Right().GetY(5);

            csEInn.SearchConstraints.Add(EIBot);
            csEInn.SearchConstraints.Add(EITop);
            csEInn.SearchConstraints.Add(EILeft);
            csEInn.SearchConstraints.Add(EIRight);
            docClass.AddDataRule(csEInn);

            var csVInn = new CharacterStringRule("ИНН заказчика", RuleBinding.Required);

            csVInn.TextToSearch = @"\d{9,12}";
            var VIBot   = new SearchConstraint().Above().Rule("ЗакИНН").Bot().GetX(0.3);
            var VITop   = new SearchConstraint().Below().Rule("ЗакИНН").Top().GetX(-0.3);
            var VILeft  = new SearchConstraint().RightOf().Rule("ЗакИНН").Right();
            var VIRight = new SearchConstraint().LeftOf().Rule("ЗакИНН").Right().GetY(5);

            csVInn.SearchConstraints.Add(VIBot);
            csVInn.SearchConstraints.Add(VITop);
            csVInn.SearchConstraints.Add(VILeft);
            csVInn.SearchConstraints.Add(VIRight);
            docClass.AddDataRule(csVInn);

            var stTotal = new StaticTextRule("ИтогоСТ", RuleBinding.Required);

            stTotal.TextToSearch = "Итого";
            var totalTop  = new SearchConstraint().Rule("Заказчик").Below().Bot().GetY(1);
            var totalLeft = new SearchConstraint().RightOf().Page().XCenter();

            stTotal.SearchConstraints.Add(totalTop);
            stTotal.SearchConstraints.Add(totalLeft);
            docClass.AddDataRule(stTotal);

            var csTotal = new CharacterStringRule("Итого", RuleBinding.Required);

            csTotal.TextToSearch = @"(\d+[\.,\s])+(\d{2})";
            var csTotBot   = new SearchConstraint().Above().Rule("ИтогоСТ").Bot().GetX(0.3);
            var csTotTop   = new SearchConstraint().Below().Rule("ИтогоСТ").Top().GetX(-0.3);
            var csTotLeft  = new SearchConstraint().RightOf().Rule("ИтогоСТ").Right();
            var csTotRight = new SearchConstraint().LeftOf().Rule("ИтогоСТ").Right().GetY(5);

            csTotal.SearchConstraints.Add(csTotBot);
            csTotal.SearchConstraints.Add(csTotTop);
            csTotal.SearchConstraints.Add(csTotLeft);
            csTotal.SearchConstraints.Add(csTotRight);
            docClass.AddDataRule(csTotal);
        }