Витягувати зміст між нотами в документі
При роботі з документами важливо легко витягти вміст з певного діапазону в межах документа. Однак зміст може складатися з складних елементів, таких як абзаци, таблиці, зображення тощо.
Незалежно від того, який вміст повинен бути вилучений, метод вилучення, який вміст завжди буде визначатися, за допомогою яких вузлів вибираються для отримання вмісту між. Це можуть бути всі текстові органи або прості текстові рядки.
Є багато можливих ситуацій і тому багато різних типів вузлів, щоб розглянути при вилучення вмісту. Наприклад, ви можете вилучити вміст:
- Два специфічних абзаців
- Специфічні траси тексту
- Поля різних типів, таких як об’єднання полів
- Старт і кінцеві діапазони закладки або коментаря
- Різні органи тексту, що містяться в окремих розділах
У деяких ситуаціях, можливо, навіть потрібно об’єднати різні типи вузлів, такі як вилучення вмісту між абзацом і поле, або між забігом і закладкою.
Дана стаття забезпечує виконання коду для вилучення тексту між різними вузлами, а також прикладами поширених сценаріїв.
Чому Екстракт контенту
Часто мета вилучення змісту полягає в тому, щоб дублювати або зберегти його окремо в новому документі. Наприклад, ви можете отримати вміст і:
- Скопіювати його в окремий документ
- Перетворення певної частини документа в PDF або зображення
- Дублікат вмісту в документі багато разів
- Робота з виписаним вмістом окремо від решти документа
Це може бути легко досягнуто за допомогою Aspose.Words і виконання коду нижче.
Вилучення вмісту алгоритму
Введіть номер мобільного, який Ви вказали при укладаннi договору з банком - для ідентифікації. Загальний контур цієї техніки передбачає:
1,1 км Зберігаючи вершини, які диктують область змісту, який буде вилучений з вашого документа. Виходячи з того, що вони хочуть бути вилучені. 1,1 км Передача цих вузлів до ExtractContent метод, передбачений нижче. Ви також повинні пройти boolean параметр, який стверджує, чи є ці вершини, діють як маркери, повинні бути включені до видобутку або ні. 1,1 км Відновлення списку клонованого вмісту (копійованих вузлів), зазначених для вилучення. Ви можете використовувати цей список вузлів в будь-який зручний спосіб, наприклад, створення нового документа, що містить тільки обраний вміст.
Як отримати контент
Щоб витягти вміст з вашого документа, потрібно викликати ExtractContent метод нижче і пропускають відповідні параметри. Основою даного методу передбачається пошук вузлів рівня блоків (парографії та таблиці) і скронювання їх для створення ідентичних копій. Якщо надійшла маркерна вершина, то метод здатний просто копіювати вміст на цьому рівні і додати його в масив.
Однак якщо маркерні вузли знаходяться в лінії (на дитину абзацу), то ситуація стає більш складною, так як необхідно розбити абзацу в інлайн-вузлі, будьте його забігом, закладками тощо. Контент у клонованих материнських вузлах не присутній між маркерами. Цей процес використовується для того, щоб вбудовані вузли ще зберігали форматування батьківського абзацу. Метод також буде виконувати перевірки на вузлах, які пропускаються як параметри, і кидає виключення, якщо або вузол недійсний. Параметри, які будуть передані в цей метод:
1,1 км StartNode і EndNodeй Першими двома параметрами є вершини, які визначають, де вилучення змісту є починати і закінчуватися відповідно. Ці вершини можуть бути як за рівнем блоку (Paragraph й Table) або рівень inline (наприклад, Run й FieldStart й BookmarkStart т.д.):
- Щоб передати поле, необхідно пройти відповідне FieldStart об’єкт
- Пропустити закладки, BookmarkStart і BookmarkEnd вузли повинні бути передані
- Пропустити коментарі, CommentRangeStart і CommentRangeEnd вузли повинні бути використані 1,1 км IsInclusiveй Захищаючи, якщо маркери включені в видобуток або ні. Якщо цей варіант встановлюється false і ті ж вершини або послідовні вузли пропускаються, після чого буде повернеться порожній список:
- Якщо FieldStart вузол пропускаються після того, як ця опція визначає, якщо вся поле повинна бути включена або виключена
- Якщо BookmarkStart або BookmarkEnd вузол пропускається, цей варіант визначає, якщо закладка включена або просто вміст між діапазоном закладок.
- Якщо 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; | |
} |
Витягувати вміст між певними пробігами
Ви можете витягувати вміст між вузлами, такими як Run й Runs з різних абзаців можна пропустити як маркери. Введіть номер мобільного, який Ви вказали при укладаннi договору з банком - для ідентифікації. 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
метод буде визначати, якщо вся поле повинна бути включена або ні. Додайте вміст поля злиття “Повний ім’я” та пункт у документі. Ми використовуємо 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
і BookmarkEnd вершини. Зміст, знайдений між цими двома вузлами, складають закладку. Ви можете пройти або з цих вузлів, як будь-який маркер, навіть з різних зауважень, до тих пір, поки початковий маркер з’являється до закінчення маркеру в документі. Ми витягуємо цей вміст у новий документ, використовуючи код нижче. Про нас 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"); |
Вилучення контенту з коментаря
Коментарі до The CommentRangeStart Всі ці вершини знаходяться в режимі онлайн. Перші два вузли захоплюють вміст у документі, який посилається коментарем, як показано на скріншоті нижче.
Про нас 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 метод повертає 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
Р Документ 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
Цей приклад зберігає документ наступним чином:
- Фільтрує польові символи та польові коди, форма, примітка, кінцеві посилання та коментарі
- Замінює кінець абзацу 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"); |
Вилучення зображень з фігур
Ви можете вилучити зображення документів для виконання деяких завдань. 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++; | |
} | |
} |