Извличане на съдържание между възлите в документ

При работа с документи е важно лесно да се извлече съдържание от определен диапазон в рамките на даден документ. Съдържанието обаче може да се състои от сложни елементи като параграфи, таблици, изображения и др.

Независимо от това какво съдържание трябва да бъде извлечено, методът за извличане на това съдържание винаги ще се определя от кои възли се избират, за да се извлече съдържание между тях. Това могат да бъдат цели текстови тела или прости текстови работи.

Има много възможни ситуации и следователно много различни видове възли да се вземат предвид при извличане на съдържание. Например, може да искате да извлечете съдържание между:

  • Два конкретни параграфа
  • Специфични редове на текста
  • Полета от различни видове, като сливане полета
  • Начална и крайна гама от отметки или коментар
  • Различни органи на текста, съдържащи се в отделни секции

В някои ситуации може дори да се наложи да комбинирате различни типове възли, като например извличане на съдържание между параграф и поле, или между тичане и отметки.

Тази статия осигурява прилагането на код за извличане на текст между различни възли, както и примери за общи сценарии.

Защо да извличаме съдържание

Често целта на извличането на съдържанието е да се дублира или запази отделно в нов документ. Например, можете да извлечете съдържание и:

  • Копирайте го в отделен документ
  • Конвертиране на конкретна част от документ в PDF или изображение
  • Дублиране на съдържанието в документа многократно
  • Работа с извлечено съдържание отделно от останалата част на документа

Това може лесно да се постигне с помощта Aspose.Words и прилагането на кода по-долу.

Извличане на съдържание Алгоритъм

Кодът в този раздел адресира всички възможни ситуации, описани по-горе с един общ и повторно използван метод. Общата схема на тази техника включва:

  1. Събиране на възлите, които диктуват областта на съдържание, което ще бъде извлечено от вашия документ. Възстановяването на тези възли се извършва от потребителя в техния код, въз основа на това, което те искат да бъдат извлечени.
  2. Преминавайки тези възли към ExtractContent метод, предоставен по-долу. Трябва също така да преминете един булев параметър, който посочва дали тези възли, действащи като маркери, трябва да бъдат включени в екстракцията или не.
  3. Извличане на списък с клонирано съдържание (копирани възли), за да бъде извлечено. Можете да използвате този списък от възли по какъвто и да е приложим начин, например създаване на нов документ, съдържащ само избраното съдържание.

Как да извлечете съдържанието

За да извлечете съдържанието от вашия документ, трябва да се обадите на ExtractContent метод по-долу и да премине съответните параметри. Основната основа на този метод включва намирането на възли на ниво блок (точки и таблици) и клонирането им, за да се създадат идентични копия. Ако преминаващите маркиращи възли са блоково ниво, тогава методът може просто да копира съдържанието на това ниво и да го добави към масива.

Въпреки това, ако маркерните възли са в линия (дете на параграф), тогава ситуацията става по-сложна, тъй като е необходимо да се раздели параграфа на вътрешния възел, било то тичане, отметки и др. Съдържанието в клонираните изходни възли, които не присъстват между маркерите, се премахва. Този процес се използва, за да се гарантира, че вътрешните възли ще запазят формата на параграфа майка. Методът също така ще извършва проверки на възлите, преминали като параметри и хвърля изключение, ако или възелът е невалиден. Параметрите, които трябва да бъдат предадени на този метод, са:

  1. StartNode както и EndNode. Първите два параметъра са възлите, които определят къде да започне извличането на съдържанието и съответно да приключи. Тези възли могат да бъдат и двата блока ниво (Paragraph , Table) или вътрешно ниво (напр. Run , FieldStart , BookmarkStart и т.н.:
    1. За да преминете полето, трябва да преминете съответното FieldStart Обект
    2. За да преминете отметките, BookmarkStart както и BookmarkEnd Възлите трябва да се преминат
    3. За да получите коментари, CommentRangeStart както и CommentRangeEnd Трябва да се използват възли
  2. IsInclusive. Определя дали маркерите са включени в екстракцията или не. Ако е зададена тази опция false и един и същ възел или последователни възли са преминали, след това празен списък ще бъде върнат:
    1. Ако FieldStart Преминава се възел, след което тази опция определя дали цялото поле трябва да бъде включено или изключено
    2. Ако BookmarkStart или BookmarkEnd Възелът се приема, тази опция определя дали отметките са включени или само съдържанието между отметките.
    3. Ако CommentRangeStart или CommentRangeEnd Възелът се приема, тази опция определя дали коментарът сам по себе си трябва да бъде включен или само съдържанието в обхвата на коментара.

Изпълнение на ExtractContent метод можете да намерите върху Aspose.Words GitHub. Този метод ще бъде посочен в сценариите в тази статия.

Също така ще определим потребителски метод за лесно генериране на документ от извлечени възли. Този метод се използва в много от сценариите по-долу и просто създава нов документ и внася извлеченото съдържание в него.

Следният пример за код показва как да се вземе списък с възли и ги вмъква в нов документ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
public static Document GenerateDocument(Document srcDoc, List<Node> nodes)
{
Document dstDoc = new Document();
// Remove the first paragraph from the empty document.
dstDoc.FirstSection.Body.RemoveAllChildren();
// Import each node from the list into the new document. Keep the original formatting of the node.
NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.KeepSourceFormatting);
foreach (Node node in nodes)
{
Node importNode = importer.ImportNode(node, true);
dstDoc.FirstSection.Body.AppendChild(importNode);
}
return dstDoc;
}

Съдържание на екстракт между параграфи

Това показва как да се използва горният метод за извличане на съдържание между конкретни параграфи. В този случай искаме да извлечем тялото на писмото, намерено в първата половина на документа. Можем да кажем, че това е между 7 и 11 абзац.

Кодът по-долу изпълнява тази задача. Съответните параграфи се извличат с помощта на GetChild метод на документа и преминаване на посочените индекси. След това предаваме тези възли на ExtractContent метод и се посочва, че те трябва да бъдат включени в екстракцията. Този метод ще върне копираното съдържание между тези възли, които след това се добавят в нов документ.

Следният пример за код показва как да се извлече съдържанието между конкретни параграфи, като се използва ExtractContent метод по- горе:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
Paragraph startPara = (Paragraph) doc.FirstSection.Body.GetChild(NodeType.Paragraph, 6, true);
Paragraph endPara = (Paragraph) doc.FirstSection.Body.GetChild(NodeType.Paragraph, 10, true);
// Extract the content between these nodes in the document. Include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startPara, endPara, true);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodes);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenParagraphs.docx");

Извличане на съдържание между различните видове възли

Можем да извлечем съдържание между всяка комбинация от блок ниво или вътрешни възли. В този сценарий по-долу ще извлечем съдържанието между първия параграф и таблицата във втория раздел, включително. Получаваме маркерите като викаме FirstParagraph както и GetChild методи на втория раздел на документа за извличане на съответния Paragraph както и Table Възли. За малко изменение нека… вместо това дублираме съдържанието и го поставяме под оригинала.

Следният пример за код показва как да се извлече съдържанието между параграф и таблица с помощта на ExtractContent метод:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
Paragraph startPara = (Paragraph) doc.LastSection.GetChild(NodeType.Paragraph, 2, true);
Table endTable = (Table) doc.LastSection.GetChild(NodeType.Table, 0, true);
// Extract the content between these nodes in the document. Include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startPara, endTable, true);
// Let's reverse the array to make inserting the content back into the document easier.
extractedNodes.Reverse();
foreach (Node extractedNode in extractedNodes)
endTable.ParentNode.InsertAfter(extractedNode, endTable);
doc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenBlockLevelNodes.docx");

Съдържание на екстракт между параграфи Въз основа на стил

Може да се наложи да извлечете съдържанието между параграфи от един и същ или различен стил, като например между точки, отбелязани със стилове на заглавие. Кодът по-долу показва как да се постигне това. Това е един прост пример, който ще извлече съдържанието между първата инстанция на нареждането на 1 и год. 3 инча стилове без извличане на заглавията, както добре. За да направим това, зададохме последния параметър на false, което посочва, че не следва да се включват маркиращите възли.

В правилното изпълнение това трябва да се стартира в цикъл, за да се извлече съдържание между всички параграфи от тези стилове от документа. Извлеченото съдържание се копира в нов документ.

Следният пример за код показва как да се извлече съдържание между параграфи със специфични стилове използване на ExtractContent метод:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
// Gather a list of the paragraphs using the respective heading styles.
List<Paragraph> parasStyleHeading1 = ParagraphsByStyleName(doc, "Heading 1");
List<Paragraph> parasStyleHeading3 = ParagraphsByStyleName(doc, "Heading 3");
// Use the first instance of the paragraphs with those styles.
Node startPara = parasStyleHeading1[0];
Node endPara = parasStyleHeading3[0];
// Extract the content between these nodes in the document. Don't include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startPara, endPara, false);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodes);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenParagraphStyles.docx");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
public List<Paragraph> ParagraphsByStyleName(Document doc, string styleName)
{
// Create an array to collect paragraphs of the specified style.
List<Paragraph> paragraphsWithStyle = new List<Paragraph>();
NodeCollection paragraphs = doc.GetChildNodes(NodeType.Paragraph, true);
// Look through all paragraphs to find those with the specified style.
foreach (Paragraph paragraph in paragraphs)
{
if (paragraph.ParagraphFormat.Style.Name == styleName)
paragraphsWithStyle.Add(paragraph);
}
return paragraphsWithStyle;
}

Извличане на съдържание между специфични работи

Можете да извлечете съдържание между inline възли като Run Както добре. Runs от различни параграфи могат да се приемат като маркери. Кодът по-долу показва как да се извлече специфичен текст между едно и също Paragraph Възел.

Следният пример за код показва как да се извлече съдържание между специфични редове от същия параграф, като се използва ExtractContent метод:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
Paragraph para = (Paragraph) doc.GetChild(NodeType.Paragraph, 7, true);
Run startRun = para.Runs[1];
Run endRun = para.Runs[4];
// Extract the content between these nodes in the document. Include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startRun, endRun, true);
foreach (Node extractedNode in extractedNodes)
Console.WriteLine(extractedNode.ToString(SaveFormat.Text));

Съдържание на екстракт чрез поле

За използване на поле като маркер, FieldStart Възелът трябва да бъде приет. Последният параметър ExtractContent методът ще определи дали цялото поле трябва да бъде включено или не. Позволява да се извлече съдържанието между полето за сливане на FullName и параграф в документа. Ние използваме MoveToMergeField метод на DocumentBuilder Клас. Това ще върне FieldStart Възел от името на сливащото се поле премина към него.

В нашия случай нека да зададете последния параметър премина към ExtractContent метод на false да се изключи полето от екстракцията. Ще предадем извлеченото съдържание на PDF.

Следният пример за код показва как да се извлече съдържание между конкретно поле и параграф в документа, като се използва ExtractContent метод:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
// Pass the first boolean parameter to get the DocumentBuilder to move to the FieldStart of the field.
// We could also get FieldStarts of a field using GetChildNode method as in the other examples.
builder.MoveToMergeField("Fullname", false, false);
// The builder cursor should be positioned at the start of the field.
FieldStart startField = (FieldStart) builder.CurrentNode;
Paragraph endPara = (Paragraph) doc.FirstSection.GetChild(NodeType.Paragraph, 5, true);
// Extract the content between these nodes in the document. Don't include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startField, endPara, false);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodes);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentUsingField.docx");

Извличане на съдържание от отметки

В документ съдържанието, което се определя в рамките на отметките, се капсулира от BookmarkStart и “Отметки край възли.” Съдържанието, намерено между тези два възела, прави отметките. Можете да минете някой от тези възли като всеки маркер, дори и тези от различни отметки, стига стартовият маркер да се появи преди крайния маркер в документа. Ще извлечем това съдържание в нов документ, използвайки кода по-долу. На IsInclusive параметър опция показва как да се запази или изхвърли отметките.

Следният пример с код показва как да се извлече съдържанието, посочено в отметките, използвайки ExtractContent метод:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
Bookmark bookmark = doc.Range.Bookmarks["Bookmark1"];
BookmarkStart bookmarkStart = bookmark.BookmarkStart;
BookmarkEnd bookmarkEnd = bookmark.BookmarkEnd;
// Firstly, extract the content between these nodes, including the bookmark.
List<Node> extractedNodesInclusive = ExtractContentHelper.ExtractContent(bookmarkStart, bookmarkEnd, true);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodesInclusive);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenBookmark.IncludingBookmark.docx");
// Secondly, extract the content between these nodes this time without including the bookmark.
List<Node> extractedNodesExclusive = ExtractContentHelper.ExtractContent(bookmarkStart, bookmarkEnd, false);
dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodesExclusive);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenBookmark.WithoutBookmark.docx");

Извличане на съдържание от коментар

Коментар е направен от коментарRangeStart, CommentRangeEnd и Коментар възли. Всички тези възли са на линия. Първите два възела капсулират съдържанието в документа, което е посочено в коментара, както се вижда на снимката по-долу.

На Comment Самото възел е InlineStory които могат да съдържат параграфи и да бягат. Тя представлява съобщението на коментара, както се вижда като коментар балон в прегледа стъкло. Тъй като този възел е в линия и потомък на тяло можете също така да извлечете съдържанието от вътре в това съобщение, както добре.

Коментарът обхваща заглавието, първия параграф и таблицата във втория раздел. Позволявам да извлечете този коментар в нов документ. На IsInclusive опцията диктува дали коментарът се поддържа или отхвърля.

Следният пример с код показва как да направите това:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
CommentRangeStart commentStart = (CommentRangeStart) doc.GetChild(NodeType.CommentRangeStart, 0, true);
CommentRangeEnd commentEnd = (CommentRangeEnd) doc.GetChild(NodeType.CommentRangeEnd, 0, true);
// Firstly, extract the content between these nodes including the comment as well.
List<Node> extractedNodesInclusive = ExtractContentHelper.ExtractContent(commentStart, commentEnd, true);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodesInclusive);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenCommentRange.IncludingComment.docx");
// Secondly, extract the content between these nodes without the comment.
List<Node> extractedNodesExclusive = ExtractContentHelper.ExtractContent(commentStart, commentEnd, false);
dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodesExclusive);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenCommentRange.WithoutComment.docx");

Как да извлечете съдържание чрез DocumentVisitor

Използвайте DocumentVisitor клас за изпълнение на този сценарий на използване. Този клас съответства на добре познатия дизайнерски модел. С DocumentVisitor , Можете да определите и изпълните потребителски операции, които изискват изброяване над дървото на документа.

DocumentVisitor осигурява набор от VisitXXX методи, които се използват, когато се среща конкретен документен елемент (нод). Например, VisitParagraphStart се нарича, когато се намери началото на текстов параграф и VisitParagraphEnd се нарича, когато се намери краят на текстов параграф. Всеки DocumentVisitor.VisitXXX метод приема съответния обект, който той среща, така че можете да го използвате, когато е необходимо (да речем извличане на форматиране), напр. и двете DocumentVisitor.VisitParagraphStart както и DocumentVisitor.VisitParagraphEnd Прием на Paragraph Възразявам.

Всеки DocumentVisitor.VisitXXX метод връща a VisitorAction стойност, която контролира изброяването на възлите. Можете да поискате или да продължите изброяването, да прескочите текущия възел (но продължете изброяването), или да спрете изброяването на възлите.

Това са стъпките, които трябва да следвате за програмно определяне и извличане на различни части на документ:

  • Създаване на клас, получен от DocumentVisitor
  • Пренареждане и осигуряване на някои или всички DocumentVisitor.VisitXXX методи за извършване на някои потребителски операции
  • Обади се. Node.Accept на възела, откъдето искате да започнете изброяването, например, ако искате да изброите целия документ, използвайте Document.Accept

DocumentVisitor осигурява изпълнението по подразбиране за всички DocumentVisitor.VisitXXX методи. Това улеснява създаването на нови посетители на документи, тъй като само методите, необходими за конкретен посетител, трябва да бъдат отменени. Не е необходимо да отменяте всички методи на посещение.

Следният пример показва как да използвате модела на Посетителя, за да добавите нови операции към Aspose.Words Модел на обекти. В този случай създаваме прост документен конвертор в текстов формат:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
ConvertDocToTxt convertToPlainText = new ConvertDocToTxt();
// Note that every node in the object model has the accept method so the visiting
// can be executed not only for the whole document, but for any node in the document.
doc.Accept(convertToPlainText);
// Once the visiting is complete, we can retrieve the result of the operation,
// That in this example, has accumulated in the visitor.
Console.WriteLine(convertToPlainText.GetText());
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
/// <summary>
/// Simple implementation of saving a document in the plain text format. Implemented as a Visitor.
/// </summary>
internal class ConvertDocToTxt : DocumentVisitor
{
public ConvertDocToTxt()
{
mIsSkipText = false;
mBuilder = new StringBuilder();
}
/// <summary>
/// Gets the plain text of the document that was accumulated by the visitor.
/// </summary>
public string GetText()
{
return mBuilder.ToString();
}
/// <summary>
/// Called when a Run node is encountered in the document.
/// </summary>
public override VisitorAction VisitRun(Run run)
{
AppendText(run.Text);
// Let the visitor continue visiting other nodes.
return VisitorAction.Continue;
}
/// <summary>
/// Called when a FieldStart node is encountered in the document.
/// </summary>
public override VisitorAction VisitFieldStart(FieldStart fieldStart)
{
// In Microsoft Word, a field code (such as "MERGEFIELD FieldName") follows
// after a field start character. We want to skip field codes and output field.
// Result only, therefore we use a flag to suspend the output while inside a field code.
// Note this is a very simplistic implementation and will not work very well.
// If you have nested fields in a document.
mIsSkipText = true;
return VisitorAction.Continue;
}
/// <summary>
/// Called when a FieldSeparator node is encountered in the document.
/// </summary>
public override VisitorAction VisitFieldSeparator(FieldSeparator fieldSeparator)
{
// Once reached a field separator node, we enable the output because we are
// now entering the field result nodes.
mIsSkipText = false;
return VisitorAction.Continue;
}
/// <summary>
/// Called when a FieldEnd node is encountered in the document.
/// </summary>
public override VisitorAction VisitFieldEnd(FieldEnd fieldEnd)
{
// Make sure we enable the output when reached a field end because some fields
// do not have field separator and do not have field result.
mIsSkipText = false;
return VisitorAction.Continue;
}
/// <summary>
/// Called when visiting of a Paragraph node is ended in the document.
/// </summary>
public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
{
// When outputting to plain text we output Cr+Lf characters.
AppendText(ControlChar.CrLf);
return VisitorAction.Continue;
}
public override VisitorAction VisitBodyStart(Body body)
{
// We can detect beginning and end of all composite nodes such as Section, Body,
// Table, Paragraph etc and provide custom handling for them.
mBuilder.Append("*** Body Started ***\r\n");
return VisitorAction.Continue;
}
public override VisitorAction VisitBodyEnd(Body body)
{
mBuilder.Append("*** Body Ended ***\r\n");
return VisitorAction.Continue;
}
/// <summary>
/// Called when a HeaderFooter node is encountered in the document.
/// </summary>
public override VisitorAction VisitHeaderFooterStart(HeaderFooter headerFooter)
{
// Returning this value from a visitor method causes visiting of this
// Node to stop and move on to visiting the next sibling node
// The net effect in this example is that the text of headers and footers
// Is not included in the resulting output
return VisitorAction.SkipThisNode;
}
/// <summary>
/// Adds text to the current output. Honors the enabled/disabled output flag.
/// </summary>
private void AppendText(string text)
{
if (!mIsSkipText)
mBuilder.Append(text);
}
private readonly StringBuilder mBuilder;
private bool mIsSkipText;
}

Как да извлечете само текст

Начините за извличане на текст от документа са:

  • Използване Document.Save с SaveFormat.Text за запис като обикновен текст във файл или поток
  • Използване Node.ToString и преминаване на SaveFormat.Text параметър. Вътрешно, това призовава за запис като текст в поток памет и връща получения низ
  • Използване Node.GetText за извличане на текст с всички Microsoft Word контролни знаци, включително кодове на полетата
  • Да се въведе обичай DocumentVisitor за извършване на персонализирана екстракция

Използване Node.GetText както и Node.ToString

A Word документ може да съдържа контролни знаци, които определят специални елементи като поле, край на клетка, край на раздел и т.н. Пълният списък на възможните Word контрол символи се определя в ControlChar Клас. На Node.GetText метод връща текст с всички знаци контролен символ присъства в възела.

Обаждане ToString връща простото текстово представяне на документа само без контролни знаци. За допълнителна информация относно износа като обикновен текст вж. следния раздел “Използване на SaveFormat.Text”.

Следният код пример показва разликата между призоваване на GetText както и ToString методи на възел:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.InsertField("MERGEFIELD Field");
// When converted to text it will not retrieve fields code or special characters,
// but will still contain some natural formatting characters such as paragraph markers etc.
// This is the same as "viewing" the document as if it was opened in a text editor.
Console.WriteLine("Convert to text result: " + doc.ToString(SaveFormat.Text));

Използване SaveFormat.Text

Този пример запазва документа, както следва:

  • Filters out field characters and field codes, форма, бележка под линия, endnote and comment references
  • Заменя края на параграфа ControlChar.Cr знаци с ControlChar.CrLf комбинации
  • Използва UTF8 кодиране

Следният пример за код показва как да се запази документ във формат TXT:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Document.docx");
doc.Save(ArtifactsDir + "BaseConversions.DocxToTxt.txt");
view raw docx-to-txt.cs hosted with ❤ by GitHub

Извличане на изображения от формите

Може да се наложи да извлечете изображения от документи, за да изпълните някои задачи. Aspose.Words ви позволява да направите това, както добре.

Следният пример за код показва как да извлечете изображения от документ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Images.docx");
NodeCollection shapes = doc.GetChildNodes(NodeType.Shape, true);
int imageIndex = 0;
foreach (Shape shape in shapes)
{
if (shape.HasImage)
{
string imageFileName =
$"Image.ExportImages.{imageIndex}_{FileFormatUtil.ImageTypeToExtension(shape.ImageData.ImageType)}";
// Note, if you have only an image (not a shape with a text and the image),
// you can use shape.GetShapeRenderer().Save(...) method to save the image.
shape.ImageData.Save(ArtifactsDir + imageFileName);
imageIndex++;
}
}