Werken met Inhoudsopgave

Vaak werk je met documenten die een inhoudsopgave bevatten (TOC). Gebruik Aspose.Words U kunt uw eigen inhoudsopgave invoegen of bestaande inhoudsopgave volledig herbouwen in het document met slechts een paar regels code. Dit artikel beschrijft hoe te werken met de inhoudsopgave en toont:

  • Hoe een gloednieuwe invoegen TOC
  • Nieuwe of bestaande TOC’s bijwerken in het document.
  • Specificeer schakelaars om de opmaak en de algemene structuur van de TOC te controleren.
  • Hoe de stijlen en het uiterlijk van de inhoudsopgave te wijzigen.
  • Hoe verwijder je een hele TOC veld samen met alle vermeldingen formulier het document.

Inhoudsopgave programmatisch invoegen

U kunt een TOC (inhoudsopgave) veld in het document op de huidige positie door het aanroepen van de DocumentBuilder.insert_table_of_contents methode.

Een inhoudsopgave in een Word-document kan op een aantal manieren worden gebouwd en geformatteerd met behulp van een verscheidenheid aan opties. Het veld schakelt dat u doorgeeft aan de methode bepaalt de manier waarop de tabel is gebouwd en weergegeven in uw document.

De standaard switches die gebruikt worden in een TOC ingevoegd in Microsoft Word zijn “Vertaling:. Beschrijvingen van deze switches evenals een lijst van ondersteunde switches vindt u later in het artikel. U kunt deze handleiding gebruiken om de juiste switches te verkrijgen of als u al een document met de soortgelijke TOC dat u veldcodes (ALT+F9) kunt tonen en de switches rechtstreeks vanuit het veld kunt kopiëren.

Het volgende codevoorbeeld laat zien hoe je een Inhoudsopgaveveld in een document invoegt:

De code toont de nieuwe inhoudsopgave die in een leeg document wordt ingevoegd. De DocumentBuilder klasse wordt vervolgens gebruikt om een aantal sample-inhoudsopmaak met de juiste stijlen van de rubriek in te voegen die worden gebruikt om de inhoud te markeren die in de TOC moet worden opgenomen. De volgende lijnen dan de TOC door het bijwerken van de velden en pagina-indeling van het document.

Inhoudsopgave bijwerken

Aspose.Words kunt u een volledige update TOC met slechts een paar regels code. Dit kan worden gedaan om een nieuw ingevoegde TOC of een bestaande TOC na wijziging van het document. De volgende twee methoden moeten worden gebruikt om de TOC velden in het document:

  1. Document.update_fields
  2. Document.update_page_layout

Houd er rekening mee dat deze twee update methoden nodig zijn om in die volgorde te worden opgeroepen. Indien omgekeerd wordt de inhoudsopgave ingevuld, maar geen paginanummers worden weergegeven. Elk aantal verschillende TOC’s kan worden bijgewerkt. Deze methoden zullen automatisch alle TOC’s in het document bijwerken.

Het volgende voorbeeld van code laat zien hoe je volledig kunt herbouwen TOC velden in het document door veldupdate aan te roepen:

De eerste oproep aan Document.update_fields zal de TOC alle tekstvermeldingen worden ingevuld en de TOC lijkt bijna compleet. Het enige wat ontbreekt is de pagina nummers die voor nu worden weergegeven met???. De tweede oproep tot Document.update_page_layout zal de lay-out van het document in het geheugen. Dit moet worden gedaan om de paginanummers van de items te verzamelen. De juiste paginanummers berekend op basis van deze oproep worden vervolgens ingevoegd in de TOC.

Gebruik Schakelen om het gedrag van de Inhoudsopgave te controleren.

Zoals bij elk ander veld, de TOC veld kan schakelaars accepteren die gedefinieerd zijn in de veldcode die bepalen hoe de inhoudstabel gebouwd wordt. Bepaalde schakelaars worden gebruikt om te bepalen welke ingangen zijn opgenomen en op welk niveau terwijl anderen worden gebruikt om het uiterlijk van de TOC te controleren. Schakelaars kunnen worden gecombineerd zodat complexe inhoudsopgave kan worden geproduceerd.

working-with-table-of-contents-aspose-words-net

Standaard zijn deze schakelaars hierboven opgenomen bij het invoegen van een standaard TOC in het document. A TOC zonder switches bevat inhoud van de ingebouwde kopstijlen (alsof de \O switch is ingesteld). De beschikbare TOC schakelaars die ondersteund worden door Aspose.Words worden hieronder vermeld en het gebruik ervan wordt in detail beschreven. Ze kunnen worden onderverdeeld in afzonderlijke secties gebaseerd op hun type. De schakelaars in de eerste sectie bepalen welke inhoud in de TOC en de schakelaars in het tweede deel regelen het uiterlijk van de TOC. Als een switch hier niet wordt vermeld dan is het momenteel niet ondersteund. Alle switches worden ondersteund in toekomstige versies. We voegen bij elke release verdere ondersteuning toe.

Markeringsschakelaars

Omschakelen Omschrijving
Heading Styles
*(\O Switch) *

Deze switch definieert dat de TOC moet worden gebouwd van de ingebouwde koers stijlen. In Microsoft Word Deze worden gedefinieerd in rubriek 1. 9. In Aspose.Words deze stijlen worden vertegenwoordigd door de bijbehorende StyleIdentifier opsomming. Deze opsomming vertegenwoordigt een lokale onafhankelijke identificatie van een stijl, bijvoorbeeld StyleIdentifier.Heading1 vertegenwoordigt de rubriek 1 stijl. Met behulp hiervan kunnen de opmaak en eigenschappen van de stijl worden opgehaald uit de Style collectie van het document. De bijbehorende Style klasse kan worden opgehaald uit de Document.Styles verzameling door gebruik te maken van de geïndexeerde eigenschap van het type StyleIdentifier.

![working-with-table-of-contents-styles](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-2.png)

Alle inhoud die met deze stijlen is geformatteerd, is opgenomen in de inhoudsopgave. Het niveau van de rubriek bepaalt het overeenkomstige hiërarchische niveau van de vermelding in het TOC. Zo zal een paragraaf met de stijl van rubriek 1 worden behandeld als het eerste niveau in de `TOC` terwijl een paragraaf met rubriek 2 wordt behandeld als het volgende niveau in de hiërarchie enzovoort.

| | **Outline Levels**
*(\U switch) * |

Elke alinea kan een kaderniveau vaststellen in het kader van alineaopties.

![working-with-table-of-contents-paragraph](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-3.png)

Deze instelling bepaalt welk niveau deze paragraaf in documenthiërarchie moet worden behandeld. Dit wordt vaak gebruikt om de indeling van een document gemakkelijk te structureren. Deze hiërarchie kan worden bekeken door over te schakelen naar Outline View in Microsoft Word. Vergelijkbaar met kopstijlen, kunnen er 1 Omtrekniveaus 1 `TOC` in het overeenkomstige niveau van de hiërarchie
Elke inhoud met een omtrekniveau, hetzij in de alineastijl, hetzij rechtstreeks op de alinea zelf, is opgenomen in de TOC. In Aspose.Words het kaderniveau wordt vertegenwoordigd door de `ParagraphFormat.OutlineLevel` eigendom van de paragraaf node. Het schemaniveau van een alinea-stijl wordt op dezelfde wijze weergegeven door de `Style.ParagraphFormat` eigendom.

| | **Custom Styles**
*(\T switch) * |

Deze switch zal het mogelijk maken aangepaste stijlen te gebruiken bij het verzamelen van items worden gebruikt in de TOC. Dit wordt vaak gebruikt in combinatie met de \O switch om aangepaste stijlen samen met ingebouwde kopstijlen in de TOC.
De parameters van de schakelaar moeten binnen spraaksporen worden ingesloten. Veel aangepaste stijlen kunnen worden opgenomen, voor elke stijl de naam moet worden gespecificeerd gevolgd door een komma gevolgd door het niveau dat de stijl moet verschijnen in de `TOC` als. Andere stijlen worden ook gescheiden door een komma.
Bijvoorbeeld

{ TOC \o "1-3" \t "CustomHeading1, 1,   CustomHeading2, 2"}

zal inhoud gestyled met CustomHeading1 gebruiken als niveau 1 inhoud in de `TOC` en CustomHeading2 als niveau 2.

| | **Use TC Fields**
*(\F en \L switches) * |

In oudere versies van Microsoft Word, de enige manier om een `TOC` was het gebruik van TC velden. Deze velden worden verborgen in het document geplaatst, zelfs wanneer veldcodes worden getoond. Zij bevatten de tekst die moet worden weergegeven in de vermelding en de `TOC` is gebouwd van hen. Deze functionaliteit wordt nu niet vaak gebruikt, maar kan in sommige gevallen nog nuttig zijn om inzendingen in de `TOC` die niet zichtbaar zijn in het document.
Wanneer ingevoegd deze velden verschijnen verborgen zelfs wanneer veldcodes worden weergegeven. Ze kunnen niet worden gezien zonder verborgen inhoud te tonen. Om deze velden te zien De paragraafopmaak tonen moet worden geselecteerd.

![working-with-table-of-contents-paragraph-settings](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-4.png)

Deze velden kunnen worden ingevoegd in een document op elke positie zoals elke andere veld en worden vertegenwoordigd door de `FieldType.FieldTOCEntry` Lijst.
De \F schakelaar in a `TOC` wordt gebruikt om te specificeren dat TC-velden moeten worden gebruikt als vermeldingen. De schakelaar zonder extra identificatie betekent dat elk TC-veld in het document zal worden opgenomen. Elke extra parameter, vaak een enkele letter, zal aangeven dat alleen TC-velden met een matching \f switch in de TOC zullen worden opgenomen. Bijvoorbeeld *
{ TOC \f t }

bevat alleen TC-velden zoals

{   TC \f t }

De `TOC` veld heeft ook een verwante switch, de

![todo:image_alt_text](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-5.png)

De `TC` velden zelf kunnen ook verschillende switches set. Dit zijn:

- Verklaart hierboven. *

Definieert welk niveau in de `TOC` dit TC veld zal verschijnen in. A `TOC` die deze zelfde switch gebruikt, zal alleen dit TC-veld bevatten als het binnen het opgegeven bereik valt. *

- De nummering van deze pagina `TOC` item wordt niet getoond. Monstercode voor het invoegen van TC-velden vindt u in de volgende sectie.

|

Verwante switches

Omschakelen Omschrijving
Omit Page Numbers
*(\N Switch) *

Deze schakelaar wordt gebruikt om paginanummers voor bepaalde niveaus van de TOC te verbergen. Bijvoorbeeld kunt u definiëren

{TOC \o "1-4" \n "3-4" }

en de paginanummers op de inzendingen van de levels 3 en 4 zullen samen met de leader dots (indien aanwezig) worden verborgen. Om slechts één niveau te specificeren dient een bereik nog steeds te worden gebruikt, bijvoorbeeld
Het leveren van geen niveau bereik zal paginanummers voor alle niveaus in de TOC weglaten. Dit is handig om in te stellen bij het exporteren van een document naar HTML of een soortgelijk formaat. Dit komt omdat HTML-gebaseerde formaten geen paginaconcept hebben en dus geen paginanummering nodig hebben.

![todo:image_alt_text](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-6.png)

| | **Insert As Hyperlinks**
*(\H Switch) * |

Deze switch specificeert dat `TOC` Ingangen worden ingevoegd als hyperlinks. Bij het bekijken van een document in Microsoft Word deze vermeldingen zullen nog steeds verschijnen als normale tekst binnen de `TOC` maar zijn hyperlinked en dus kan worden gebruikt om te navigeren naar de positie van het oorspronkelijke item in het document met behulp van *Ctrl + Left Click* in Microsoft Word. Wanneer deze switch is opgenomen dan zijn deze links ook bewaard gebleven in andere formaten. Bijvoorbeeld in HTML-gebaseerde formaten waaronder EPUB en weergegeven formaten zoals PDF en XPS Deze zullen worden geëxporteerd als werklinks.
Zonder deze schakelaar set de `TOC` in al deze outputs zal worden geëxporteerd als platte tekst en zal dit gedrag niet demonstreren. Als een document wordt geopend in MS Word zal de tekst van de items ook niet op deze manier te klikken, maar de paginanummers kunnen nog steeds worden gebruikt om te navigeren naar het oorspronkelijke item.

![working-with-table-of-contents-titles](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-7.png)

| | **Set Separator Character**
*(\P Switch) * |

Deze switch maakt het mogelijk om de inhoud van de titel van het item en paginanummering gemakkelijk te wijzigen in de TOC. Het te gebruiken scheidingsteken moet na deze schakelaar worden gespecificeerd en in spraakmarkeringen worden ingesloten.
In tegenstelling tot wat in Office-documentatie is gedocumenteerd, kan slechts één karakter worden gebruikt in plaats van maximaal vijf. Dit geldt zowel voor MS Word als Aspose.Words.
Het gebruik van deze switch is niet aanbevolen omdat het niet veel controle over wat het gebruikt om te scheiden items en paginanummers in de TOC. In plaats daarvan wordt aanbevolen om de juiste `TOC` stijl zoals `StyleIdentifier.TOC1` en van daaruit de leider stijl bewerken met toegang tot specifieke lettertype leden etc. Meer details over hoe dit te doen vindt u later in het artikel.

![working-with-table-of-contents-toc](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-8.png)

| | **Preserve Tab Entries**
*(\W switch) * |

Met behulp van deze switch zal aangeven dat alle items die een tabteken hebben, bijvoorbeeld een kop die een tabblad aan het einde van de regel heeft, worden behouden als een juiste tabteken bij het vullen van de TOC. Dit betekent dat de functie van het tabteken aanwezig zal zijn in de `TOC` en kan worden gebruikt om het item te formatteren. Bijvoorbeeld bepaalde items kunnen tab-stops en tab-tekens gebruiken om de tekst gelijkmatig te spatief te maken. Zolang de overeenkomstige `TOC` niveau definieert het equivalent tabblad stopt dan de gegenereerde `TOC` ingangen zullen verschijnen met dezelfde afstand.

In dezelfde situatie als deze switch niet werd gedefinieerd dan zouden de tabtekens worden omgezet in witte ruimte equivalent als niet-functionele tabbladen. De output zou dan niet verschijnen zoals verwacht.

![working-with-table-of-contents-aspose](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-9.png)

| | **Preserve New Line Entries**
*(\X Switch) * |

Gelijkaardig aan de schakelaar hierboven, deze switch specificeert dat rubrieken over meerdere lijnen (met behulp van nieuwe regeltekens niet gescheiden alinea's) worden bewaard zoals ze zijn in de gegenereerde TOC. Bijvoorbeeld, een kop die zich over meerdere lijnen verspreidt kan het nieuwe lijnteken gebruiken (Ctrl + Enter of `ControlChar.LineBreak`) om inhoud over verschillende lijnen te scheiden. Met deze schakelaar gespecificeerd, het item in de `TOC` zal deze nieuwe regel tekens behouden zoals hieronder getoond.

In deze situatie als de switch niet wordt gedefinieerd dan worden de nieuwe regeltekens omgezet in een enkele witte ruimte.

![working-with-table-of-contents-aspose-words](/words/python-net/working-with-table-of-contents/working-with-table-of-contents-10.png)

|

TC velden invoegen

U kunt een nieuw TC veld op de huidige positie van de DocumentBuilder door de DocumentBuilder.insert_field methode en het specificeren van de veldnaam als Onderstaand voorbeeld laat zien hoe je een TC veld in het document met DocumentBuilder.

Inhoudsopgave wijzigen

De opmaak van de inzendingen in de TOC gebruik niet de originele stijlen van de gemarkeerde items, in plaats daarvan wordt elk niveau geformatteerd met behulp van een equivalent TOC stijl. Bijvoorbeeld het eerste niveau in de TOC is geformatteerd met de TOC1 stijl, het tweede niveau geformatteerd met de TOC2 stijl enzovoort. Dit betekent dat het uiterlijk van de TOC deze stijlen moeten gewijzigd worden. In Aspose.Words deze stijlen worden vertegenwoordigd door de lokale onafhankelijke StyleIdentifier.TOC1 tot StyleIdentifier.TOC9 en kan worden opgehaald uit de Document.styles verzameling met behulp van deze identificatiemiddelen.

Zodra de juiste stijl van het document is opgehaald kan de opmaak voor deze stijl worden gewijzigd. Wijzigingen in deze stijlen zullen automatisch worden weergegeven op de TOC’s in het document. Onderstaand voorbeeld verandert een opmaakeigenschap gebruikt in het eerste niveau TOC stijl.

Het is ook nuttig op te merken dat elke directe opmaak van een alinea (gedefinieerd op de alinea zelf en niet in de stijl) gemarkeerd om de TOC zal worden gekopieerd in de vermelding in de TOC. Bijvoorbeeld als de rubriek 1 stijl wordt gebruikt om inhoud te markeren voor de TOC en deze stijl heeft Bold formattering, terwijl de alinea heeft ook cursief formatteren direct toegepast. Het resultaat TOC invoer zal niet vet omdat dat deel uitmaakt van stijl formatteren, maar het zal cursief als dit direct is geformatteerd op de alinea.

U kunt ook de opmaak van de scheidingstekens tussen elk item en paginanummer controleren. Standaard is dit een stippellijn die wordt verspreid over de pagina nummering met behulp van een tabteken en een rechter tabblad stop opgesteld dicht bij de rechter marge.

Gebruik van de Style klasse opgehaald voor de specifieke TOC niveau dat u wilt wijzigen, kunt u ook wijzigen hoe deze verschijnen in het document. Om eerst te veranderen hoe dit eruit ziet Style.paragraph_format moet worden aangeroepen om de paragraaf opmaak voor de stijl op te halen. Hieruit kunnen de tabs worden opgehaald door te bellen ParagraphFormat.tab_stops en het desbetreffende tabblad wordt gewijzigd. Met behulp van dezelfde techniek kan het tabblad zelf worden verplaatst of verwijderd allemaal samen. Hieronder ziet u hoe u de positie van het rechter tabblad kunt wijzigen TOC gerelateerde paragrafen.

Een inhoudsopgave uit het document verwijderen

Een inhoudsopgave kan uit het document worden verwijderd door alle tussen de FieldStart en FieldEnd knooppunt van de TOC veld. De onderstaande code toont dit aan. Het verwijderen van de TOC veld is eenvoudiger dan een normaal veld omdat we niet bijhouden van geneste velden. In plaats daarvan controleren we de FieldEnd knooppunt is type FieldType.FIELD_TOC Wat betekent dat we het einde van de huidige TOC hebben meegemaakt. Deze techniek kan in dit geval worden gebruikt zonder zorgen te maken over geneste velden, omdat we kunnen aannemen dat een goed gevormd document niet volledig genest TOC veld in een ander TOC veld.

Ten eerste de FieldStart knooppunten van elk TOC worden verzameld en opgeslagen. De opgegeven TOC wordt dan opgesomd zodat alle knooppunten in het veld worden bezocht en opgeslagen. De knooppunten worden dan uit het document verwijderd. Below code monster toont aan hoe een gespecificeerd monster te verwijderen TOC van een document.

Inhoudsopgave uitpakken

Als u een inhoudsopgave uit een Word-document wilt halen, kan de volgende codemonster worden gebruikt.

doc = aw.Document(docs_base.my_dir + "Table of contents.docx")

for field in doc.range.fields :
            
    if (field.type == aw.fields.FieldType.FIELD_HYPERLINK) :
                
        hyperlink = field.as_field_hyperlink()
        if (hyperlink.sub_address != None and hyperlink.sub_address.find("_Toc") == 0) :
                    
            tocItem = field.start.get_ancestor(aw.NodeType.PARAGRAPH).as_paragraph()
                        
            print(tocItem.to_string(aw.SaveFormat.TEXT).strip())
            print("------------------")
    
            bm = doc.range.bookmarks.get_by_name(hyperlink.sub_address)
            pointer = bm.bookmark_start.get_ancestor(aw.NodeType.PARAGRAPH).as_paragraph()
                        
            print(pointer.to_string(aw.SaveFormat.TEXT))