/// <summary> /// Compara la instancia actual con otro objeto del mismo tipo y devuelve un entero /// que indica si la posición de la instancia actual es anterior, posterior o igual /// que la del otro objeto en el criterio de ordenación. /// </summary> /// <param name="obj"> Objeto que se va a comparar con esta instancia.</param> /// <returns> /// Un valor que indica el orden relativo de los objetos que se están comparando.El /// valor devuelto tiene los siguientes significados:Valor Significado Menor que /// cero Esta instancia es anterior a obj en el criterio de ordenación. Zero Esta /// instancia se produce en la misma posición del criterio de ordenación que obj. /// Mayor que cero Esta instancia sigue a obj en el criterio de ordenación. /// </returns> public int CompareTo(object obj) { if (this == obj) { return(0); } PdfTagPattern input = (obj as PdfTagPattern); if (input == null) { throw new ArgumentException("Parámetro de tipo incorrecto."); } if ((MatchesCount - ErrorsCount) > (input.MatchesCount - input.ErrorsCount)) { return(-1); } else if ((MatchesCount - ErrorsCount) == (input.MatchesCount - input.ErrorsCount)) { if (MatchesCount > input.MatchesCount) { return(-1); } else { return(1); } } else { return(1); } }
///// <summary> ///// Añade un nuevo resultado. ///// </summary> ///// <param name="name">Nombre del item.</param> ///// <param name="matchesCount">Número de matches del patrón.</param> ///// <param name="value">Valor de resultado encontrado.</param> //public void AddResult(string name, int matchesCount, object value) //{ // if (!Results.ContainsKey(name)) // Results.Add(name, new List<PdfTagExtractionItemResult>()); // PdfTagExtractionItemResult itemResult = new PdfTagExtractionItemResult() // { // MatchesCount = matchesCount, // Value = value // }; // if (Results[name].IndexOf(itemResult) == -1) // Results[name].Add(itemResult); //} /// <summary> /// Añade un nuevo resultado. /// </summary> /// <param name="pattern">PdfTagPattern que obtiene el resultado.</param> /// <param name="value">Valor de resultado encontrado.</param> public void AddResult(PdfTagPattern pattern, object value) { if (!Results.ContainsKey(pattern.MetadataItemName)) { Results.Add(pattern.MetadataItemName, new List <PdfTagExtractionItemResult>()); } PdfTagExtractionItemResult itemResult = new PdfTagExtractionItemResult() { Pattern = pattern, Value = value }; if (Results[pattern.MetadataItemName].IndexOf(itemResult) == -1) { Results[pattern.MetadataItemName].Add(itemResult); } }
/*public int CompareTo(object obj) * { * if (this == obj) * return 0; * * PdfTagPattern input = (obj as PdfTagPattern); * * if (input == null) * throw new ArgumentException("Parámetro de tipo incorrecto."); * * if (MatchesCount > input.MatchesCount) * return -1; * else * return 1; * * }*/ /// <summary> /// Determina si el objeto especificado es igual al objeto actual. /// </summary> /// <param name="obj">Objeto que se va a comparar con el objeto actual.</param> /// <returns>Es true si el objeto especificado es igual al objeto actual; /// en caso contrario, es false.</returns> public override bool Equals(object obj) { PdfTagPattern input = (obj as PdfTagPattern); if (input == null) { throw new ArgumentException("Parámetro de tipo incorrecto."); } bool equalsRectangle = false; if (SourceTypeName.Equals("ColorFontWordGroupsInfos")) { if (CFType == input.CFType) { if (CFType == "X") { if (PdfRectangle.Llx == input.PdfRectangle.Llx || PdfRectangle.Urx == input.PdfRectangle.Urx) { equalsRectangle = true; } } else if (CFType == "Y") { if (PdfRectangle.Lly == input.PdfRectangle.Lly || PdfRectangle.Ury == input.PdfRectangle.Ury) { equalsRectangle = true; } } else { equalsRectangle = true; } } } else if (PdfRectangle == null) { if (input.PdfRectangle == null) { equalsRectangle = true; } } else { equalsRectangle = PdfRectangle.Equals(input.PdfRectangle); } if (SourceTypeName.Equals("ColorFontWordGroupsInfos")) // Comprobamos que las propiedades del ColorFontWordGroups sean las mismas. { return(MetadataItemName == input.MetadataItemName && PdfPageN == input.PdfPageN && IsLastPage == input.IsLastPage && equalsRectangle && RegexPattern == input.RegexPattern && Position == input.Position && SourceTypeName == input.SourceTypeName && FillColor == input.FillColor && StrokeColor == input.StrokeColor && FontName == input.FontName && FontSize == input.FontSize && CFType == input.CFType); } else { return(MetadataItemName == input.MetadataItemName && PdfPageN == input.PdfPageN && IsLastPage == input.IsLastPage && equalsRectangle && RegexPattern == input.RegexPattern && Position == input.Position && SourceTypeName == input.SourceTypeName); } }
/// <summary> /// Obtiene un almacén de patrones a partir de unos /// resultados de comparación. /// </summary> /// <param name="compareResult">Resultados de comparación.</param> /// <returns>Almacén de patrones.</returns> private static PdfTagPatternStore GetStore(PdfCompareResult compareResult) { PdfTagPatternStore store = new PdfTagPatternStore { DocCategory = compareResult.DocCategory, DocID = compareResult.DocID, HierarchySetName = compareResult.HierarchySetName, MetadataName = compareResult.MetadataName, CompareCount = 1 }; foreach (var info in compareResult.WordGroupsInfos) { PdfTagPattern pattern = info.GetPdfTagPattern(); pattern.SourceTypeName = "WordGroupsInfos"; if (store.PdfPatterns.IndexOf(pattern) == -1) { store.PdfPatterns.Add(pattern); } } foreach (var info in compareResult.LinesInfos) { PdfTagPattern pattern = info.GetPdfTagPattern(); pattern.SourceTypeName = "LinesInfos"; if (store.PdfPatterns.IndexOf(pattern) == -1) { store.PdfPatterns.Add(pattern); } } foreach (var info in compareResult.PdfTextInfos) { PdfTagPattern pattern = info.GetPdfTagPattern(); pattern.SourceTypeName = "PdfTextInfos"; if (store.PdfPatterns.IndexOf(pattern) == -1) { store.PdfPatterns.Add(pattern); } } List <PdfTagPattern> usedPatterns = new List <PdfTagPattern>(); foreach (var info in compareResult.ColorFontWordGroupsInfos) { PdfTagPattern pattern = info.GetPdfTagPattern(); pattern.SourceTypeName = "ColorFontWordGroupsInfos"; if (store.PdfPatterns.IndexOf(pattern) == -1) { store.PdfPatterns.Add(pattern); } else { // Intentamos quitar los falsos positivos. if (!usedPatterns.Contains(pattern)) { usedPatterns.Add(pattern); } } } // Rutina de eliminación de patrones que tengan más de una aparición. (Quita los falsos positivos). foreach (PdfTagPattern usedPattern in usedPatterns) { store.PdfPatterns.Remove(usedPattern); } return(store); }
/// <summary> /// Determina si el objeto especificado es igual al objeto actual. /// </summary> /// <param name="obj">Objeto que se va a comparar con el objeto actual.</param> /// <returns>Es true si el objeto especificado es igual al objeto actual; /// en caso contrario, es false.</returns> public override bool Equals(object obj) { PdfTagPattern input = (obj as PdfTagPattern); if (input == null) { throw new ArgumentException("Parámetro de tipo incorrecto."); } bool equalsTextString = false; bool equalsRectangle = false; if (input.SourceTypeName.Equals("TextStringInfos")) // Comprobamos si las propiedades de los textString coinciden { if (FontSize != null && input.FontSize != null && ColorFill != null && input.ColorFill != null && ColorStroke != null && input.ColorStroke != null && FontType != null && input.FontType != null && TsType != null && input.TsType != null) { if (ColorFill.Equals(input.ColorFill) && ColorStroke.Equals(input.ColorStroke) && FontSize.Equals(input.FontSize) && FontType.Equals(input.FontType) && TsType.Equals(input.TsType)) { if ((TsType.Equals("X") || TsType.Equals("Y")) && TsCoordinate.Equals(input.TsCoordinate)) { equalsTextString = true; } else if (TsType.Equals("NA")) { equalsTextString = true; } } } } else { equalsTextString = true; } if (PdfRectangle != null && input.PdfRectangle != null) // Comprobamos si el rectángulo coincide && FontType==null { equalsRectangle = PdfRectangle.Equals(input.PdfRectangle); } else { equalsRectangle = true; } return((MetadataItemName == input.MetadataItemName && PdfPageN == input.PdfPageN && IsLastPage == input.IsLastPage && equalsRectangle && RegexPattern == input.RegexPattern && Position == input.Position && SourceTypeName == input.SourceTypeName) && equalsTextString); }