/// <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)); }
/// <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); }