Při generování dokumentů aplikace Word v jazyce Java možná budete muset vytvořit obsah (TOC). Můžete najít různá řešení pro vytváření TOC, ale musíte psát složitý kód a můžete čelit problémům s rozložením. Dovolte mi tedy poskytnout vám jednoduchou a snadno implementovatelnou metodu k vytvoření obsahu v dokumentech aplikace Word v Javě.

Vytvořte TOC ve Wordu

Obsah(TOC) ve Word DOC poskytuje přehled o tom, co dokument obsahuje. Kromě toho vám umožňuje přejít do určité části dokumentu. V následujících částech se naučíte krok za krokem metodu vytvoření obsahu v dokumentu aplikace Word. Také uvidíte, jak extrahovat, aktualizovat a odstranit obsah v dokumentu aplikace Word v Javě.

C# API pro vytváření obsahu v dokumentech aplikace Word

Pro práci s obsahy v dokumentech aplikace Word použijeme Aspose.Words for .NET. Uvedené API je navrženo pro provádění základních i pokročilých funkcí automatizace aplikace Word z aplikací .NET. Kromě toho vám poskytuje dobrou kontrolu nad manipulací s obsahem v dokumentech aplikace Word. API si můžete buď stáhnout, nebo jej nainstalovat pomocí NuGet.

PM> Install-Package Aspose.Words

Jak vytvořit obsah ve Wordu v C#

Následují kroky k vytvoření obsahu v dokumentu aplikace Word v C#.

Následující ukázka kódu ukazuje, jak přidat obsah do dokumentu aplikace Word v jazyce C#.

// Úplné příklady a datové soubory najdete na https://github.com/aspose-words/Aspose.Words-for-.NET
// Cesta k adresáři dokumentů.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Inicializujte dokument.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Na začátek dokumentu vložte obsah.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// Nově vložený obsah bude zpočátku prázdný.
// Je třeba jej vyplnit aktualizací polí v dokumentu.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

Extrahujte obsah z dokumentu aplikace Word v jazyce C#

Následují kroky k extrahování polí z obsahu v dokumentu aplikace Word.

  • Načtěte dokument aplikace Word pomocí třídy Document.
  • Procházejte každé Pole v dokumentu pomocí kolekce Document.Range.Fields.
  • Zkontrolujte, zda je typ pole hypertextový odkaz pomocí vlastnosti Field.Type.
  • Zkontrolujte, zda pole spadá pod část obsahu.
  • Získejte informace o poli a vytiskněte je.

Následující ukázka kódu ukazuje, jak extrahovat obsah z dokumentu aplikace Word pomocí jazyka C#.

// Cesta k adresáři dokumentů.
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];
				// Získejte umístění, na které ukazuje tato položka TOC
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

C# Aktualizace obsahu v dokumentu aplikace Word

Kdykoli připojíte nějaký obsah k dokumentu aplikace Word, musíte aktualizovat obsah. Chcete-li to provést programově, stačí před uložením dokumentu zavolat metodu Document.UpdateFields().

Odebrat obsah v dokumentu aplikace Word

Aspose.Words for .NET také umožňuje odstranit obsah z dokumentu aplikace Word. Následují kroky k provedení této operace.

  • Nejprve načtěte dokument aplikace Word pomocí třídy Document.
  • Získejte a uložte FieldStart uzlů každého TOC do pole.
  • Procházejte uzly, dokud nezískáte uzel typu FieldEnd(konec obsahu).
  • Odstraňte uzly pomocí metody Node.Remove() a uložte aktualizovaný dokument.

Následující ukázka kódu ukazuje, jak odebrat obsah z dokumentu aplikace Word v jazyce C#.

// Úplné příklady a datové soubory najdete na https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
    
    // Cesta k adresáři dokumentů.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // Otevřete dokument, který obsahuje TOC.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // Odeberte z dokumentu první obsah.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // Uložte výstup.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Odebere z dokumentu zadané pole obsahu.
///</summary>
///<param name="doc"> Dokument, ze kterého se má pole odebrat.</param>
///<param name="index"> Index TOC, který se má odstranit, založený na nule.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // Uložte uzly FieldStart polí obsahu v dokumentu pro rychlý přístup.
    ArrayList fieldStarts = new ArrayList();
    // Toto je seznam pro uložení uzlů nalezených uvnitř zadaného obsahu. Budou odstraněny
    // Na konci této metody.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // Přidejte všechny FieldStarty, které jsou typu FieldTOC.
            fieldStarts.Add(start);
        }
    }

    // Ujistěte se, že TOC určený předaným indexem existuje.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // Získejte FieldStart zadaného obsahu.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // Je bezpečnější tyto uzly uložit a později je všechny najednou smazat.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // Jakmile narazíme na uzel FieldEnd typu FieldTOC, pak víme, že jsme na konci
        // Z aktuálního TOC a tady se můžeme zastavit.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // Odeberte všechny uzly nalezené v zadaném obsahu.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

Vytvořte obsah pomocí bezplatné licence

Můžete získat bezplatnou dočasnou licenci a vytvořit obsah v dokumentech aplikace Word bez omezení hodnocení.

Závěr

V tomto článku jste se naučili, jak programově pracovat s obsahem v dokumentu aplikace Word. Podrobný průvodce a ukázky kódu ukázaly, jak přidat, aktualizovat, extrahovat a odstranit obsah z dokumentů aplikace Word v C#.

C# Word Processing API – Prozkoumejte více

Další informace o automatizačním rozhraní C# Word můžete prozkoumat pomocí dokumentace. V případě jakýchkoli dotazů nebo obav nás kontaktujte prostřednictvím našeho fóra.

Viz také