Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
При работе с документами важно уметь легко извлекать контент из определенного диапазона в документе. Однако содержание может состоять из сложных элементов, таких как абзацы, таблицы, изображения и т.д.
Независимо от того, какой контент необходимо извлечь, способ извлечения этого контента всегда будет определяться тем, какие узлы выбраны для извлечения контента между ними. Это могут быть целые текстовые тела или простые текстовые строки.
Существует множество возможных ситуаций и, следовательно, множество различных типов узлов, которые следует учитывать при извлечении контента. Например, вы можете извлечь контент между:
В некоторых ситуациях вам может даже потребоваться комбинировать различные типы узлов, такие как извлечение контента между абзацем и полем или между прогоном и закладкой.
В данной статье представлена реализация кода для извлечения текста между различными узлами, а также примеры общих сценариев.
Часто целью извлечения контента является дублирование или сохранение его отдельно в новом документе. Например, вы можете извлечь контент и:
Это может быть легко достигнуто с помощью Aspose.Words и реализация кода ниже.
Код в этом разделе рассматривает все возможные ситуации, описанные выше, с помощью одного обобщенного и многоразового метода. Общий контур этой техники включает в себя:
Чтобы извлечь контент из вашего документа, вам нужно позвонить в ExtractContent ниже и пройти соответствующие параметры. Основой этого метода является поиск узлов уровня блоков (параграфов и таблиц) и их клонирование для создания идентичных копий. Если пропускаемые маркерные узлы являются уровнями блоков, то способ может просто скопировать содержимое на этом уровне и добавить его в массив.
Однако если маркерные узлы являются встроенными (ребенок абзаца), то ситуация становится более сложной, так как необходимо разделить абзац на встроенный узел, будь то прогон, поля закладок и т.д. Содержание в клонированных родительских узлах, не присутствующих между маркерами, удаляется. Этот процесс используется для обеспечения того, чтобы встроенные узлы по-прежнему сохраняли форматирование исходного абзаца. Метод также запускает проверки на узлах, прошедших в качестве параметров, и делает исключение, если любой из узлов недействителен. Параметры, которые должны быть переданы этому методу:
Осуществление этого ExtractContent Метод, который вы можете найти на Aspose.Words GitHub. Этот метод будет упомянут в сценариях в этой статье.
Мы также определим пользовательский метод для легкого создания документа из извлеченных узлов. Этот метод используется во многих сценариях ниже и просто создает новый документ и импортирует в него добытый контент.
Следующий пример кода показывает, как взять список узлов и вставить их в новый документ:
Это показывает, как использовать метод выше для извлечения содержимого между конкретными абзацами. В этом случае мы хотим извлечь тело письма, найденное в первой половине документа. Можно сказать, что это между 7-м и 11-м абзацем.
Приведенный ниже код позволяет выполнить эту задачу. Соответствующие пункты извлекаются с использованием GetChild метод на документе и прохождение указанных индексов. Затем мы передаем эти узлы в ExtractContent Способ и состояние, что они должны быть включены в экстракцию. Этот метод возвращает скопированное содержимое между этими узлами, которые затем вставляются в новый документ.
Следующий пример кода показывает, как извлечь содержимое между конкретными абзацами, используя ExtractContent метод выше:
Мы можем извлекать контент между любыми комбинациями уровней блоков или встроенных узлов. В этом сценарии ниже мы будем извлекать содержание между первым абзацем и таблицей во втором разделе включительно. Мы получаем узлы маркеров, вызывая FirstParagraph и GetChild методы, описанные во втором разделе документа, для получения соответствующего Paragraph и Table Узлы. Для небольшого изменения давайте вместо этого продублируем контент и вставим его ниже оригинала.
Следующий пример кода показывает, как извлечь содержимое между абзацем и таблицей, используя ExtractContent метод:
Вам может потребоваться извлечь содержимое между абзацами одного и того же или другого стиля, например, между абзацами, помеченными стилями заголовков. Приведенный ниже код показывает, как этого добиться. Это простой пример, который будет извлекать содержимое между первым экземпляром стилей “Голова 1” и “Голова 3”, не извлекая заголовки. Для этого мы установили последний параметр false, который указывает, что маркерные узлы не должны быть включены.
В правильной реализации это должно быть запущено в цикле для извлечения содержимого между всеми абзацами этих стилей из документа. Извлеченный контент копируется в новый документ.
Следующий пример кода показывает, как извлекать контент между абзацами с использованием определенных стилей. ExtractContent метод:
Вы можете извлекать контент между встроенными узлами, такими как Run И тоже. Runs Из разных абзацев могут быть пропущены как маркеры. В приведенном ниже коде показано, как извлечь конкретный текст между ними. Paragraph Узел.
Следующий пример кода показывает, как извлекать контент между конкретными прогонами одного и того же абзаца, используя ExtractContent метод:
Чтобы использовать поле в качестве маркера, FieldStart Узел должен быть пропущен. Последний параметр для ExtractContent Метод определяет, будет ли включено все поле или нет. Выделим содержание между полем слияния “Полное имя” и абзацем в документе. Мы используем MoveToMergeField метод DocumentBuilder класс. Это вернет обратно FieldStart Узел от названия поля слияния перешел к нему.
В нашем случае давайте установим последний параметр, переданный ExtractContent метод для false исключить поле из добычи. Мы переведем извлеченный контент в PDF.
Следующий пример кода показывает, как извлечь содержимое между конкретным полем и абзацем в документе, используя ExtractContent метод:
В документе содержание, которое определено в закладке, инкапсулируется BookmarkStart и узлы BookmarkEnd. Содержание, найденное между этими двумя узлами, составляет закладку. Вы можете передать любой из этих узлов в качестве любого маркера, даже из разных закладок, если начальный маркер появляется перед конечным маркером в документе. Мы будем извлекать этот контент в новый документ, используя код ниже. The IsInclusive Параметр опции показывает, как сохранить или отбросить закладку.
Следующий пример кода показывает, как извлечь контент, на который ссылается закладка, используя ExtractContent метод:
Комментарий состоит из узлов CommentRangeStart, CommentRangeEnd и Comment. Все эти узлы являются встроенными. Первые два узла инкапсулируют содержание в документе, на которое ссылается комментарий, как видно на скриншоте ниже.
The Comment Сам по себе узел является InlineStory может содержать абзацы и строки. Он представляет собой сообщение комментария, рассматриваемое как пузырь комментариев в панели обзора. Поскольку этот узел является встроенным и потомком тела, вы также можете извлечь содержимое из этого сообщения.
Комментарий содержит заголовок, первый абзац и таблицу во втором разделе. Давайте добавим этот комментарий в новый документ. The IsInclusive Опция диктует, сохраняется или отбрасывается сам комментарий.
Следующий пример кода показывает, как это сделать:
Используйте DocumentVisitor Класс для реализации этого сценария использования. Этот класс соответствует известному шаблону дизайна посетителя. с DocumentVisitor , Вы можете определять и выполнять пользовательские операции, которые требуют перечисления по дереву документов.
DocumentVisitor Предоставляет набор из VisitXXX Методы, которые используются при встрече с конкретным элементом документа (узлом). Например, VisitParagraphStart Называется, когда найдено начало абзаца текста и VisitParagraphEnd Называется при обнаружении конца текстового абзаца. Каждый DocumentVisitor.VisitXXX метод принимает соответствующий объект, с которым он сталкивается, чтобы вы могли использовать его по мере необходимости (например, восстановить форматирование), например, оба DocumentVisitor.VisitParagraphStart и DocumentVisitor.VisitParagraphEnd принять Paragraph объект.
Каждый DocumentVisitor.VisitXXX Способ возвращает VisitorAction значение, которое контролирует перечисление узлов. Вы можете запросить либо продолжить перечисление, пропустить текущий узел (но продолжить перечисление), либо остановить перечисление узлов.
Вот шаги, которым вы должны следовать, чтобы программно определить и извлечь различные части документа:
DocumentVisitor обеспечивает реализацию по умолчанию для всех DocumentVisitor.VisitXXX методы. Это облегчает создание новых посетителей документов, поскольку только методы, необходимые для конкретного посетителя, должны быть отменены. Нет необходимости переопределять все методы посетителей.
Следующий пример показывает, как использовать шаблон посетителя для добавления новых операций в систему. Aspose.Words объектная модель. В этом случае мы создаем простой конвертер документов в текстовый формат:
Способы извлечения текста из документа:
Node.GetText и Node.ToStringА. Документ Word может содержать управляющие символы, которые обозначают специальные элементы, такие как поле, конец ячейки, конец секции и т.д. Полный список возможных символов управления Словом определен в ControlChar класс. The Node.GetText Способ возвращает текст со всеми символами управляющего характера, присутствующими в узле.
Звонить ToString возвращает простое текстовое представление документа только без управляющих символов. Для получения дополнительной информации об экспорте в виде простого текста см. следующий раздел “Использование SaveFormat.Text.
Следующий пример кода показывает разницу между вызовом GetText и ToString методы на узле:
SaveFormat.TextЭтот пример сохраняет документ следующим образом:
Следующий пример кода показывает, как сохранить документ в формате TXT:
Вам может потребоваться извлечь изображения документов для выполнения некоторых задач. Aspose.Words Это также позволяет вам сделать это.
Следующий пример кода показывает, как извлечь изображения из документа:
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.