/// <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);
            }
        }
示例#2
0
        ///// <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);
        }
示例#5
0
        /// <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);
        }