Під час створення документів Word у Java вам може знадобитися створити зміст (TOC). Ви можете знайти різні рішення для створення TOC, однак вам доведеться писати складний код, і ви можете зіткнутися з проблемами макета. Тож дозвольте мені надати вам простий і легкий у реалізації метод створення змісту в документах Word на Java.

Створення змісту в Word

Зміст(Зміст) у Word DOC дає огляд того, що містить документ. Крім того, це дозволяє переходити до певного розділу документа. У наступних розділах ви дізнаєтесь, як крок за кроком створити зміст у документі Word. Крім того, ви побачите, як видобувати, оновлювати та видаляти зміст у документі Word у Java.

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 за допомогою документації. Якщо у вас виникли запитання або сумніви, зв’яжіться з нами через наш форум.

Дивись також