private Rect CheckPageConstraint(SearchConstraint constraint, Rect currentRect) { var rectToCheck = _currentPage.Bound; Rect result = RestrictArea(rectToCheck, constraint); return(Rect.Intersect(currentRect, result)); }
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); }
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); }
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); }
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); }
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); }