コード例 #1
0
 /// <summary>
 /// Indica si el PdfTextChunck pasado como argumento
 /// es el último de la matriz _PdfTextChunks.
 /// </summary>
 /// <param name="chunk">True si es el último de la colección.</param>
 /// <returns>True si es el último de la colección, false si no.</returns>
 private bool IsLastChunck(PdfTextChunk chunk)
 {
     return(_PdfTextChunks.IndexOf(chunk) == (_PdfTextChunks.Count - 1));
 }
コード例 #2
0
        /// <summary>
        /// Implementa la extracción de grupos de palabras
        /// como texto contenido en rectangulos.
        /// </summary>
        /// <param name="fullLine">Indica si se quiere obtener el contenido
        /// por líneas completas.</param>
        /// <returns>Matriz con los rectángulos obtenidos.</returns>
        public List <PdfTextRectangle> GetWordGroups(bool fullLine = false)
        {
            List <PdfTextRectangle> rectangles = new List <PdfTextRectangle>();

            _PdfTextChunks.Sort();

            StringBuilder sb        = new StringBuilder();
            Rectangle     rec       = null;
            PdfTextChunk  lastChunk = null;

            foreach (PdfTextChunk chunk in _PdfTextChunks)
            {
                if (lastChunk == null)
                {
                    sb.Append(chunk.Text);
                    rec = new Rectangle(chunk.Ll[Vector.I1], chunk.Ll[Vector.I2],
                                        chunk.Ur[Vector.I1], chunk.Ur[Vector.I2]);
                }
                else
                {
                    bool isLastChunk = IsLastChunck(chunk);

                    if ((IsChunkAtWordBoundary(chunk, lastChunk) && !fullLine) ||
                        !chunk.SameLine(lastChunk) ||
                        isLastChunk)
                    {
                        if (isLastChunk) // Guardo la última palabra
                        {
                            rec = Merge(rec, new Rectangle(chunk.Ll[Vector.I1], chunk.Ll[Vector.I2],
                                                           chunk.Ur[Vector.I1], chunk.Ur[Vector.I2]));
                            sb.Append(chunk.Text);

                            rectangles.Add(new PdfTextRectangle(rec)
                            {
                                Text = sb.ToString().Trim()
                            });
                        }
                        else
                        {
                            rectangles.Add(new PdfTextRectangle(rec)
                            {
                                Text = sb.ToString().Trim()
                            });

                            // reset sb + rec
                            rec = new Rectangle(chunk.Ll[Vector.I1], chunk.Ll[Vector.I2],
                                                chunk.Ur[Vector.I1], chunk.Ur[Vector.I2]);
                            sb = new StringBuilder();
                        }
                    }
                    else
                    {
                        rec = Merge(rec, new Rectangle(chunk.Ll[Vector.I1], chunk.Ll[Vector.I2],
                                                       chunk.Ur[Vector.I1], chunk.Ur[Vector.I2]));
                    }

                    if (IsChunkAtWordBoundary(chunk, lastChunk) &&
                        !StartsWithSpace(chunk.Text) &&
                        !EndsWithSpace(lastChunk.Text))
                    {
                        sb.Append(' ');
                    }

                    sb.Append(chunk.Text);
                }

                lastChunk = chunk;
            }

            return(rectangles);
        }