När du skapar Word-dokument i Java kan du behöva skapa en innehållsförteckning (TOC). Du kan hitta olika lösningar för att skapa TOC, men du måste skriva komplex kod och du kan möta layoutproblem. Så låt mig ge dig en enkel och lättimplementerad metod för att skapa en innehållsförteckning i Word-dokument i Java.

Skapa innehållsförteckning i Word

Innehållsförteckning(TOC) i en Word DOC ger dig en överblick över vad ett dokument innehåller. Dessutom låter den dig navigera till en viss del av dokumentet. I följande avsnitt kommer du att lära dig en steg-för-steg-metod för att skapa en innehållsförteckning i ett Word-dokument. Du kommer också att se hur du extraherar, uppdaterar och tar bort en innehållsförteckning i ett Word-dokument i Java.

C# API för att skapa innehållsförteckning i Word-dokument

För att arbeta med innehållsförteckningar i Word-dokument kommer vi att använda Aspose.Words for .NET. Nämnda API är utformat för att utföra grundläggande såväl som avancerade Word-automatiseringsfunktioner inifrån .NET-applikationer. Dessutom ger det dig ett bra grepp över manipuleringen av innehållsförteckningen i Word-dokument. Du kan antingen ladda ner API:t eller installera det med NuGet.

PM> Install-Package Aspose.Words

Hur man skapar innehållsförteckning i Word i C#

Följande är stegen för att skapa en innehållsförteckning i ett Word-dokument i C#.

Följande kodexempel visar hur man lägger till en innehållsförteckning i ett Word-dokument i C#.

// För fullständiga exempel och datafiler, gå till https://github.com/aspose-words/Aspose.Words-for-.NET
// Sökvägen till dokumentkatalogen.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Initiera dokument.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Infoga en innehållsförteckning i början av dokumentet.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// Den nyligen infogade innehållsförteckningen kommer till en början att vara tom.
// Den måste fyllas i genom att uppdatera fälten i dokumentet.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

Extrahera innehållsförteckning från ett Word-dokument i C#

Följande är stegen för att extrahera fält från en innehållsförteckning i ett Word-dokument.

  • Ladda Word-dokumentet med klassen Dokument.
  • Gå igenom varje Fält i dokumentet med Document.Range.Fields-samlingen.
  • Kontrollera om fälttypen är en hyperlänk med egenskapen Field.Type.
  • Kontrollera om fältet hamnar under avsnittet innehållsförteckning.
  • Hämta informationen i fältet och skriv ut den.

Följande kodexempel visar hur man extraherar en innehållsförteckning från ett Word-dokument med C#.

// Sökvägen till dokumentkatalogen.
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];
				// Hämta platsen som detta TOC-objekt pekar på
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

C# Uppdatera innehållsförteckning i Word-dokument

När du lägger till något innehåll i ett Word-dokument måste du uppdatera innehållsförteckningen. För att göra det programmatiskt behöver du helt enkelt anropa metoden Document.UpdateFields() innan du sparar dokumentet.

Ta bort innehållsförteckning i Word-dokument

Aspose.Words för .NET låter dig också ta bort innehållsförteckningen från ett Word-dokument. Följande är stegen för att utföra denna operation.

  • Ladda först Word-dokumentet med klassen Dokument.
  • Hämta och lagra FieldStart-noderna för varje innehållsförteckning i en array.
  • Gå igenom noderna tills du får noden av typen FieldEnd(slutet på innehållsförteckningen).
  • Ta bort noderna med metoden Node.Remove() och spara det uppdaterade dokumentet.

Följande kodexempel visar hur man tar bort innehållsförteckningen från ett Word-dokument i C#.

// För fullständiga exempel och datafiler, gå till https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
    
    // Sökvägen till dokumentkatalogen.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // Öppna ett dokument som innehåller en innehållsförteckning.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // Ta bort den första innehållsförteckningen från dokumentet.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // Spara utgången.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Tar bort det angivna innehållsförteckningsfältet från dokumentet.
///</summary>
///<param name="doc"> Dokumentet att ta bort fältet från.</param>
///<param name="index"> Det nollbaserade indexet för innehållsförteckningen som ska tas bort.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // Lagra FieldStart-noderna för innehållsförteckningsfält i dokumentet för snabb åtkomst.
    ArrayList fieldStarts = new ArrayList();
    // Detta är en lista för att lagra noderna som finns i den angivna innehållsförteckningen. De kommer att tas bort
    // I slutet av denna metod.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // Lägg till alla FieldStarts som är av typen FieldTOC.
            fieldStarts.Add(start);
        }
    }

    // Se till att innehållsförteckningen som anges av det godkända indexet finns.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // Hämta FieldStart för den angivna innehållsförteckningen.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // Det är säkrare att lagra dessa noder och ta bort dem alla på en gång senare.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // När vi väl stöter på en FieldEnd-nod av typen FieldTOC vet vi att vi är i slutet
        // Av nuvarande innehållsförteckning och vi kan sluta här.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // Ta bort alla noder som finns i den angivna innehållsförteckningen.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

Skapa innehållsförteckning med en gratis licens

Du kan få en gratis tillfällig licens och skapa en innehållsförteckning i Word-dokument utan utvärderingsbegränsningar.

Slutsats

I den här artikeln har du lärt dig hur du arbetar med en innehållsförteckning i ett Word-dokument programmatiskt. Steg-för-steg-guiden och kodexemplen har visat hur man lägger till, uppdaterar, extraherar och tar bort innehållsförteckningen från Word-dokument i C#.

C# Word Processing API - Utforska mer

Du kan utforska mer om C# Word automation API med dokumentation. Om du skulle ha några frågor eller funderingar, vänligen kontakta oss via vårt forum.

Se även