Під час створення документів Word у Java вам може знадобитися створити зміст (TOC). Ви можете знайти різні рішення для створення TOC, однак вам доведеться писати складний код, і ви можете зіткнутися з проблемами макета. Тож дозвольте мені надати вам простий і легкий у реалізації метод створення змісту в документах Word на Java.
Зміст(Зміст) у Word DOC дає огляд того, що містить документ. Крім того, це дозволяє переходити до певного розділу документа. У наступних розділах ви дізнаєтесь, як крок за кроком створити зміст у документі Word. Крім того, ви побачите, як видобувати, оновлювати та видаляти зміст у документі Word у Java.
- C# API для додавання, редагування або видалення змісту в документах Word
- Додайте зміст у документ Word
- Витягніть зміст із документа Word
- Оновлення змісту в документі Word
- Видалення змісту в документі Word
- Отримайте безкоштовну ліцензію API
C# API для створення змісту в документах Word
Для роботи зі змістом у документах Word ми будемо використовувати Aspose.Words for .NET. Зазначений API призначений для виконання основних, а також розширених функцій автоматизації Word із програм .NET. Крім того, це дає вам чітке уявлення про маніпуляції зі змістом у документах Word. Ви можете завантажити API або встановити його за допомогою NuGet.
PM> Install-Package Aspose.Words
Як створити зміст у Word на C#
Нижче наведено кроки для створення змісту в документі Word на C#.
- Створіть екземпляр класу Document(якщо завантажується існуючий документ Word, вкажіть у конструкторі шлях до файлу).
- Створіть екземпляр класу DocumentBuilder та ініціалізуйте його створеним раніше об’єктом Document.
- Вставте зміст за допомогою методу DocumentBuilder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u").
- Оновіть поля за допомогою методу Document.UpdateFields().
- Збережіть документ Word за допомогою методу Document.Save(String).
У наведеному нижче прикладі коду показано, як додати зміст у документ Word на C#.
// Щоб отримати повні приклади та файли даних, перейдіть на сторінку https://github.com/aspose-words/Aspose.Words-for-.NET
// Шлях до каталогу документів.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Ініціалізувати документ.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Вставте зміст на початку документа.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");
// Щойно вставлений зміст спочатку буде порожнім.
// Його потрібно заповнити, оновивши поля в документі.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);
Видобуток змісту з документа Word у C#
Нижче наведено кроки, щоб витягти поля зі змісту в документі Word.
- Завантажте документ Word за допомогою класу Document.
- Перегляньте кожне Field у документі за допомогою колекції Document.Range.Fields.
- Перевірте, чи є тип поля гіперпосиланням за допомогою властивості Field.Type.
- Перевірте, чи знаходиться поле під розділом змісту.
- Отримайте інформацію поля та роздрукуйте її.
У наведеному нижче прикладі коду показано, як отримати зміст із документа Word за допомогою C#.
// Шлях до каталогу документів.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
string fileName = "TOC.doc";
Aspose.Words.Document doc = new Aspose.Words.Document(dataDir + fileName);
foreach (Field field in doc.Range.Fields)
{
if (field.Type.Equals(Aspose.Words.Fields.FieldType.FieldHyperlink))
{
FieldHyperlink hyperlink = (FieldHyperlink)field;
if (hyperlink.SubAddress != null && hyperlink.SubAddress.StartsWith("_Toc"))
{
Paragraph tocItem = (Paragraph)field.Start.GetAncestor(NodeType.Paragraph);
Console.WriteLine(tocItem.ToString(SaveFormat.Text).Trim());
Console.WriteLine("------------------");
if (tocItem != null)
{
Bookmark bm = doc.Range.Bookmarks[hyperlink.SubAddress];
// Отримайте розташування, на яке вказує цей елемент змісту
Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
Console.WriteLine(pointer.ToString(SaveFormat.Text));
}
} // End If
}// End If
}// End Foreach
C# Оновлення змісту в документі Word
Щоразу, коли ви додаєте певний вміст до документа Word, вам потрібно оновити зміст. Щоб зробити це програмно, вам просто потрібно викликати метод Document.UpdateFields() перед збереженням документа.
Видалення змісту в документі Word
Aspose.Words for .NET також дозволяє видалити зміст із документа Word. Нижче наведено кроки для виконання цієї операції.
- Спочатку завантажте документ Word за допомогою класу Document.
- Отримайте та збережіть вузли FieldStart кожного змісту в масиві.
- Перебирайте вузли, доки не отримаєте вузол типу FieldEnd(кінець змісту).
- Видаліть вузли за допомогою методу Node.Remove() і збережіть оновлений документ.
У наведеному нижче прикладі коду показано, як видалити зміст із документа Word у C#.
// Щоб отримати повні приклади та файли даних, перейдіть на сторінку https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
// Шлях до каталогу документів.
string dataDir = RunExamples.GetDataDir_WorkingWithStyles();
// Відкрийте документ, який містить зміст.
Document doc = new Document(dataDir + "Document.TableOfContents.doc");
// Видаліть перший зміст із документа.
RemoveTableOfContents(doc, 0);
dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
// Збережіть результат.
doc.Save(dataDir);
Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Видаляє вказане поле змісту з документа.
///</summary>
///<param name="doc"> Документ, з якого потрібно видалити поле.</param>
///<param name="index"> Індекс TOC від нуля, який потрібно видалити.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
// Зберігайте вузли FieldStart полів TOC у документі для швидкого доступу.
ArrayList fieldStarts = new ArrayList();
// Це список для зберігання вузлів, знайдених у вказаному TOC. Вони будуть видалені
// В кінці цього способу.
ArrayList nodeList = new ArrayList();
foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
{
if (start.FieldType == FieldType.FieldTOC)
{
// Додайте всі FieldStarts типу FieldTOC.
fieldStarts.Add(start);
}
}
// Переконайтеся, що TOC, визначений переданим індексом, існує.
if (index > fieldStarts.Count - 1)
throw new ArgumentOutOfRangeException("TOC index is out of range");
bool isRemoving = true;
// Отримайте FieldStart зазначеного TOC.
Node currentNode = (Node)fieldStarts[index];
while (isRemoving)
{
// Безпечніше зберегти ці вузли та видалити їх усі одразу пізніше.
nodeList.Add(currentNode);
currentNode = currentNode.NextPreOrder(doc);
// Коли ми зустрічаємо вузол FieldEnd типу FieldTOC, ми знаємо, що ми в кінці
// З поточного TOC і ми можемо зупинитися тут.
if (currentNode.NodeType == NodeType.FieldEnd)
{
FieldEnd fieldEnd = (FieldEnd)currentNode;
if (fieldEnd.FieldType == FieldType.FieldTOC)
isRemoving = false;
}
}
// Видаліть усі вузли, знайдені у вказаному вмісті.
foreach (Node node in nodeList)
{
node.Remove();
}
}
Створюйте зміст із безкоштовною ліцензією
Ви можете отримати безкоштовну тимчасову ліцензію і створювати зміст у документах Word без оціночних обмежень.
Висновок
У цій статті ви дізналися, як програмно працювати зі змістом у документі Word. У покроковому посібнику та зразках коду показано, як додавати, оновлювати, витягувати та видаляти зміст із документів Word у C#.
C# Word Processing API – дізнайтеся більше
Ви можете дізнатися більше про API автоматизації C# Word за допомогою документації. Якщо у вас виникли запитання або сумніви, зв’яжіться з нами через наш форум.