Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Al trabajar con documentos, es importante poder extraer fácilmente contenido de un rango específico dentro de un documento. Sin embargo, el contenido puede consistir en elementos complejos como párrafos, tablas, imágenes, etc.
Independientemente del contenido que deba extraerse, el método para extraer ese contenido siempre estará determinado por los nodos seleccionados para extraer el contenido. Pueden ser cuerpos de texto completos o ejecuciones de texto simples.
Hay muchas situaciones posibles y, por lo tanto, muchos tipos de nodos diferentes a considerar al extraer contenido. Por ejemplo, es posible que desees extraer contenido entre:
En algunas situaciones, es posible que incluso necesites combinar diferentes tipos de nodos, como extraer contenido entre un párrafo y un campo, o entre una ejecución y un marcador.
Este artículo proporciona la implementación del código para extraer texto entre diferentes nodos, así como ejemplos de escenarios comunes.
A menudo, el objetivo de extraer el contenido es duplicarlo o guardarlo por separado en un documento nuevo. Por ejemplo, puede extraer contenido y:
Esto se puede lograr fácilmente usando Aspose.Words y la implementación del código a continuación.
El código de esta sección aborda todas las situaciones posibles descritas anteriormente con un método generalizado y reutilizable. El esquema general de esta técnica implica:
Para extraer el contenido de su documento, debe llamar al método ExtractContent a continuación y pasar los parámetros apropiados. La base subyacente de este método consiste en encontrar nodos a nivel de bloque (párrafos y tablas) y clonarlos para crear copias idénticas. Si los nodos marcadores pasados están a nivel de bloque, entonces el método puede simplemente copiar el contenido en ese nivel y agregarlo a la matriz.
Sin embargo, si los nodos marcadores están en línea (un hijo de un párrafo), entonces la situación se vuelve más compleja, ya que es necesario dividir el párrafo en el nodo en línea, ya sea una ejecución, campos de marcadores, etc. El contenido en los nodos principales clonados no presente entre los marcadores se elimina. Este proceso se utiliza para garantizar que los nodos en línea aún conserven el formato del párrafo principal. El método también ejecutará comprobaciones en los nodos pasados como parámetros y generará una excepción si alguno de los nodos no es válido. Los parámetros que se pasarán a este método son:
La implementación del método ExtractContent se puede encontrar en en Aspose.Words GitHub. Se hará referencia a este método en los escenarios de este artículo.
También definiremos un método personalizado para generar fácilmente un documento a partir de nodos extraídos. Este método se utiliza en muchos de los escenarios siguientes y simplemente crea un nuevo documento e importa el contenido extraído en él.
El siguiente ejemplo de código muestra cómo tomar una lista de nodos e insertarlos en un nuevo documento:
Esto demuestra cómo utilizar el método anterior para extraer contenido entre párrafos específicos. En este caso, queremos extraer el cuerpo de la carta que se encuentra en la primera mitad del documento. Podemos decir que esto está entre el párrafo 7 y 11.
El siguiente código realiza esta tarea. Los párrafos correspondientes se extraen utilizando el método GetChild en el documento y pasando los índices especificados. Luego pasamos estos nodos al método ExtractContent y declaramos que se incluirán en la extracción. Este método devolverá el contenido copiado entre estos nodos que luego se inserta en un nuevo documento.
El siguiente ejemplo de código muestra cómo extraer el contenido entre párrafos específicos utilizando el método ExtractContent anterior:
Podemos extraer contenido entre cualquier combinación de nivel de bloque o nodos en línea. En este escenario a continuación, extraeremos el contenido entre el primer párrafo y la tabla de la segunda sección inclusive. Obtenemos los nodos de marcadores llamando a los métodos FirstParagraph y GetChild en la segunda sección del documento para recuperar los nodos Paragraph y Table apropiados. Para una ligera variación, dupliquemos el contenido e insertémoslo debajo del original.
El siguiente ejemplo de código muestra cómo extraer el contenido entre un párrafo y una tabla usando el método ExtractContent:
Es posible que necesite extraer el contenido entre párrafos del mismo estilo o de diferente estilo, como entre párrafos marcados con estilos de encabezado. El siguiente código muestra cómo lograr esto. Es un ejemplo simple que extraerá el contenido entre la primera instancia de los estilos “Encabezado 1” y “Encabezado 3” sin extraer también los encabezados. Para hacer esto, configuramos el último parámetro en falso, que especifica que los nodos marcadores no deben incluirse.
En una implementación adecuada, esto debería ejecutarse en un bucle para extraer el contenido entre todos los párrafos de estos estilos del documento. El contenido extraído se copia en un nuevo documento.
El siguiente ejemplo de código muestra cómo extraer contenido entre párrafos con estilos específicos utilizando el método ExtractContent:
También puede extraer contenido entre nodos en línea, como Run. Se puede pasar texto de diferentes párrafos como marcadores. El siguiente código muestra cómo extraer texto específico entre el mismo nodo Paragraph.
El siguiente ejemplo de código muestra cómo extraer contenido entre ejecuciones específicas del mismo párrafo utilizando el método ExtractContent:
Para utilizar un campo como marcador, se debe pasar el nodo FieldStart. El último parámetro del método ExtractContent definirá si se incluirá o no todo el campo. Extraigamos el contenido entre el campo de combinación “Nombre completo” y un párrafo del documento. Usamos el método MoveToMergeField de la clase DocumentBuilder. Esto devolverá el nodo FieldStart a partir del nombre del campo de combinación que se le pasó.
En nuestro caso, establezcamos el último parámetro pasado al método ExtractContent en falso para excluir el campo de la extracción. Representaremos el contenido extraído en PDF.
El siguiente ejemplo de código muestra cómo extraer contenido entre un campo y un párrafo específicos del documento utilizando el método ExtractContent:
En un documento, el contenido definido dentro de un marcador está encapsulado por los nodos BookmarkStart y BookmarkEnd. El contenido que se encuentra entre estos dos nodos constituye el marcador. Puede pasar cualquiera de estos nodos como cualquier marcador, incluso los de diferentes marcadores, siempre que el marcador inicial aparezca antes del marcador final en el documento. Extraeremos este contenido en un nuevo documento usando el siguiente código. La opción del parámetro IsInclusive muestra cómo conservar o descartar el marcador.
El siguiente ejemplo de código muestra cómo extraer el contenido al que se hace referencia en un marcador utilizando el método ExtractContent:
Un comentario se compone de los nodos CommentRangeStart, CommentRangeEnd y Comment. Todos estos nodos están en línea. Los dos primeros nodos encapsulan el contenido del documento al que hace referencia el comentario, como se ve en la captura de pantalla siguiente.
El nodo Comment en sí es un InlineStory que puede contener párrafos y ejecuciones. Representa el mensaje del comentario visto como una burbuja de comentario en el panel de revisión. Como este nodo está en línea y es descendiente de un cuerpo, también puede extraer el contenido desde dentro de este mensaje.
El comentario resume el título, el primer párrafo y la tabla de la segunda sección. Extraigamos este comentario en un nuevo documento. La opción IsInclusive dicta si el comentario en sí se conserva o se descarta.
El siguiente ejemplo de código muestra cómo hacer esto:
Utilice la clase DocumentVisitor para implementar este escenario de uso. Esta clase corresponde al conocido patrón de diseño Visitor. Con DocumentVisitor , puede definir y ejecutar operaciones personalizadas que requieren enumeración en el árbol del documento.
DocumentVisitor proporciona un conjunto de métodos VisitXXX que se invocan cuando se encuentra un elemento (nodo) de documento en particular. Por ejemplo, se llama a VisitParagraphStart cuando se encuentra el comienzo de un párrafo de texto y se llama a VisitParagraphEnd cuando se encuentra el final de un párrafo de texto. Cada método DocumentVisitor.VisitXXX acepta el objeto correspondiente que encuentra para que pueda usarlo según sea necesario (por ejemplo, recuperar el formato), por ejemplo, tanto DocumentVisitor.VisitParagraphStart como DocumentVisitor.VisitParagraphEnd aceptan un objeto Paragraph.
Cada método DocumentVisitor.VisitXXX devuelve un valor VisitorAction que controla la enumeración de nodos. Puede solicitar continuar la enumeración, omitir el nodo actual (pero continuar la enumeración) o detener la enumeración de nodos.
Estos son los pasos que debe seguir para determinar y extraer mediante programación varias partes de un documento:
DocumentVisitor proporciona implementaciones predeterminadas para todos los métodos DocumentVisitor.VisitXXX. Esto facilita la creación de nuevos visitantes de documentos, ya que solo es necesario anular los métodos necesarios para el visitante en particular. No es necesario anular todos los métodos de visitante.
El siguiente ejemplo muestra cómo utilizar el patrón Visitante para agregar nuevas operaciones al modelo de objetos Aspose.Words. En este caso, creamos un conversor de documentos simple a formato de texto:
Las formas de recuperar texto del documento son:
Node.GetText y Node.ToStringUn documento de Word puede contener caracteres de control que designan elementos especiales como campo, final de celda, final de sección, etc. La lista completa de posibles caracteres de control de Word se define en la clase ControlChar. El método Node.GetText devuelve texto con todos los caracteres de control presentes en el nodo.
Llamar a ToString devuelve la representación de texto sin formato del documento solo sin caracteres de control. Para obtener más información sobre la exportación como texto sin formato, consulte la siguiente sección “Usando SaveFormat.Text”.
El siguiente ejemplo de código muestra la diferencia entre llamar a los métodos GetText y ToString en un nodo:
SaveFormat.TextEste ejemplo guarda el documento de la siguiente manera:
El siguiente ejemplo de código muestra cómo guardar un documento en formato TXT:
Es posible que necesite extraer imágenes de documentos para realizar algunas tareas. Aspose.Words también le permite hacer esto.
El siguiente ejemplo de código muestra cómo extraer imágenes de un documento:
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.