Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Когато работите с документи, е важно да можете лесно да извличате съдържание от определен диапазон в документа. Съдържанието обаче може да се състои от сложни елементи като параграфи, таблици, изображения и т.н.
Независимо от това какво съдържание трябва да бъде извлечено, методът за извличане на това съдържание винаги ще се определя от това кои възли са избрани за извличане на съдържание между. Те могат да бъдат цели текстови тела или прости текстови работи.
Има много възможни ситуации и следователно много различни типове възли, които трябва да се вземат предвид при извличане на съдържание. Например, може да искате да извлечете съдържание между:
В някои ситуации може дори да се наложи да комбинирате различни типове възли, като извличане на съдържание между абзац и поле или между изпълнение и отметка.
Тази статия предоставя имплементация на код за извличане на текст между различни възли, както и примери за общи сценарии.
Често целта на извличането на съдържанието е да го дублирате или запишете отделно в нов документ. Например, можете да извличате съдържание и:
Това може лесно да се постигне с Aspose.Words и прилагането на кода по-долу.
Кодът в този раздел разглежда всички възможни ситуации, описани по-горе, с един обобщен и многократно използваем метод. Общото описание на тази техника включва:
За да извлечете съдържанието от вашия документ, трябва да се обадите на метода ExtractContent по-долу и да подадете съответните параметри. Основната основа на този метод включва намирането на възли на ниво блок (параграфи и таблици) и клонирането им, за да се създадат идентични копия. Ако преминатите маркерни възли са на блоково ниво, методът може просто да копира съдържанието на това ниво и да го добави към масива.
Ако обаче маркерните възли са вградени (дете на абзац), тогава ситуацията става по-сложна, тъй като е необходимо да се раздели параграфът на вградения възел, било то бягане, полета за отметки и т.н. Съдържанието в клонираните родителски възли, което не присъства между маркерите, се отстранява. Този процес се използва, за да се гарантира, че вградените възли ще запазят форматирането на родителския абзац. Методът също така ще изпълнява проверки на възлите, преминали като параметри и хвърля изключение, ако някой от възлите е невалиден. Параметрите, които трябва да бъдат предадени на този метод са::
StartNode и EndNode. Първите два параметъра са възлите, които определят къде да започне извличането на съдържанието и да завърши съответно. Тези възли могат да бъдат както на блоково ниво (абзац, таблица), така и на вътрешно ниво (напр.бягане, FieldStart, BookmarkStart и т.н.):
IsInclusive. Определя дали маркерите са включени в екстракцията или не. Ако тази опция е настроена на невярно и са предадени един и същ възел или последователни възли, ще бъде върнат празен списък.:
Прилагането на ExtractContent метод можете да намерите ето. Този метод ще бъде посочен в сценариите в тази статия.
Също така ще дефинираме персонализиран метод за лесно генериране на документ от извлечени възли. Този метод се използва в много от сценариите по-долу и просто създава нов документ и внася извлеченото съдържание в него.
Следващият пример за код показва как да вземете списък с възли и да ги вмъкнете в нов документ.
Това показва как да използвате метода по-горе, за да извлечете съдържание между конкретни параграфи. В този случай искаме да извлечем тялото на писмото, намерено в първата половина на документа. Можем да кажем, че това е между 7-ми и 11-ти абзац.
Кодът по-долу изпълнява тази задача. Съответните параграфи се извличат, като се използва методът GetChild на документа и се предават посочените индекси. След това предаваме тези възли на метода ExtractContent и заявяваме, че те трябва да бъдат включени в екстракцията. Този метод ще върне копираното съдържание между тези възли, които след това се вмъкват в нов документ.
Следният пример за код показва как да извлечете съдържанието между конкретни параграфи, като използвате метода ExtractContent по-горе:
Можем да извлечем съдържание между всякакви комбинации от блокове или инлайн възли. В този сценарий по-долу ще извлечем съдържанието между първия параграф и таблицата във втория раздел включително. Получаваме възлите на маркерите, като извикаме метода Body.FirstParagraph и GetChild във втория раздел на документа, за да извлечем съответните възли на абзаца и таблицата. За лека вариация нека вместо това да дублираме съдържанието и да го вмъкнем под оригинала.
Следният пример за код показва как да извлечете съдържанието между абзац и таблица, като използвате метода ExtractContent:
Може да се наложи да извлечете съдържанието между абзаци от едни и същи или различни стилове, например между абзаци, маркирани със заглавни стилове. Кодът по-долу показва как да се постигне това. Това е прост пример, който ще извлече съдържанието между първата инстанция на стиловете “Heading 1” и “заглавка 3”, без да извлича и заглавията. За да направим това, задаваме последния параметър на невярно, което указва, че маркерните възли не трябва да бъдат включени.
При правилно изпълнение това трябва да се изпълнява в цикъл, за да се извлече съдържание между всички параграфи на тези стилове от документа. Извлеченото съдържание се копира в нов документ.
Следващият пример за код показва как да извличате съдържание между абзаци с конкретни стилове, като използвате метода ExtractContent:
Можете също така да извличате съдържание между инлайн възли, като Run. Runs от различни параграфи могат да се предават като маркери. Кодът по-долу показва как да извлечете конкретен текст между един и същ Paragraph възел.
Следващият пример за код показва как да извличате съдържание между конкретни серии от един и същ абзац, като използвате метода ExtractContent:
За да се използва поле като маркер, трябва да се премине възелът FieldStart. Последният параметър на метода ExtractContent ще определи дали цялото поле трябва да бъде включено или не. Нека извлечем съдържанието между полето за обединяване “FullName " и абзац в документа. Ние използваме MoveToMergeField метода на DocumentBuilder клас. Това ще върне FieldStart възела от името на полето за обединяване, предадено към него.
В нашия случай нека зададем последния параметър, предаден на метода ExtractContent, за да изключим полето от екстракцията. Ние ще превърнем извлеченото съдържание в PDF.
Следният пример за код показва как да извлечете съдържание между конкретно поле и абзац в документа, като използвате метода ExtractContent:
В документ Съдържанието, което е дефинирано в отметка, се капсулира от възлите BookmarkStart и BookmarkEnd. Съдържанието, намерено между тези два възела, съставлява отметката. Можете да подавате всеки от тези възли като маркер, дори и такива от различни отметки, стига началният маркер да се показва преди крайния маркер в документа. Ще извлечем това съдържание в нов документ, като използваме кода по-долу. Опцията IsInclusive параметър показва как да запазите или отхвърлите отметката.
Следващият пример за код показва как да извлечете съдържанието, свързано с отметка, като използвате метода ExtractContent:
Коментарът се състои от възли CommentRangeStart, CommentRangeEnd и коментар. Всички тези възли са вградени. Първите два възела капсулират съдържанието в документа, към който се отнася коментарът, както се вижда на екранната снимка по-долу.
Самият възел Comment е InlineStory, който може да съдържа абзаци и да се изпълнява. Тя представлява съобщението на коментара, както се вижда като коментар балон в екрана за визуализация. Тъй като този възел е инлайн и потомък на тяло, можете също да извлечете съдържанието от това съобщение.
Коментарът съдържа заглавието, първия параграф и таблицата във втория раздел. Нека извлечем този коментар в нов документ. Опцията IsInclusive диктува дали коментарът да бъде запазен или отхвърлен.
Следващият пример за код показва как да направите това:
Използвайте клас DocumentVisitor, за да реализирате този сценарий на използване. Този клас съответства на добре познатия дизайн на посетителите. С DocumentVisitor, можете да дефинирате и изпълнявате персонализирани операции, които изискват изброяване върху дървото на документа.
DocumentVisitor
Всеки метод DocumentVisitor.VisitXXX връща VisitorAction стойност, която контролира изброяването на възли. Можете да поискате или да продължите изброяването, да пропуснете текущия възел (но да продължите изброяването), или да спрете изброяването на възли.
Това са стъпките, които трябва да следвате, за да определите и извлечете програмно различни части от документ.:
Node.Accept на възела, от който искате да започнете изброяването. Например, ако искате да изброите целия документ, използвайте Document.AcceptDocumentVisitor
Този пример показва как да използвате Посетителския модел, за да добавите нови операции към обектния модел Aspose.Words. В този случай създаваме прост конвертор на документи в текстов формат:
Начините за извличане на текст от документа са::
Node.GetText и Node.ToStringДокумент Word може да съдържа контролни знаци, които обозначават специални елементи като поле, край на клетката, край на секция и т.н. Пълният списък на възможните Word контролни знаци е дефиниран в класа ControlChar. Методът Node.GetText връща текст с всички контролни символи, присъстващи във възела.
Извикване ToString връща обикновен текстово представяне на документа само без контролни знаци.
Следващият пример за код показва разликата между извикването на методи 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.