Wat moet ik doen als ik op de inhoudsopgave van een PDF kan klikken, maar na extractie het niveau kwijtraak?

De bladwijzerhiërarchie moet vóór het schrijven worden gecontroleerd. Het eerste item is één niveau, en daaropvolgende items kunnen maximaal met één niveau worden verhoogd; het voorbeeld verwerpt illegale niveaus en paginanummers die buiten het bereik vallen, en verandert niet automatisch het niveau om de mapstructuur te vervalsen. Bladwijzerpaginanummers beginnen bij één, en pagina-indexen beginnen meestal bij nul.

De inhoudsopgavepagina van de PDF kan normaal worden omgeleid in de lezer, maar nadat deze is geëxtraheerd met behulp van een script, kan de hiërarchie plat zijn, kunnen de paginanummers verkeerd zijn geplaatst of kan zelfs de index abnormaal zijn. Dit type probleem komt vaak voor bij het samenvoegen van gescande bestanden of bestanden met onregelmatige bladwijzerstructuren. Als de extractieresultaten rechtstreeks aan downstreamgebruikers worden doorgegeven, kunnen er fouten optreden in de vertalingssegmentatie en koppeling.

Dit artikel is bedoeld voor ontwikkelaars en documentatieteams die PDF-catalogi batchgewijs moeten verwerken. Na het lezen kunt u de betekenis van de get_toc()-retourwaarde begrijpen, de verificatieregels voor niveaus en paginanummers beheersen en weten welke situaties moeten worden omgezet naar handmatige verificatie. Dit artikel maakt gebruik van een synthetisch voorbeeld om de verwerkingsmethode te demonstreren, en de code is door het voorbeeld gecontroleerd in een geïsoleerde omgeving, maar dit biedt geen garantie voor alle echte bestanden of producteffecten. Voordat u belangrijke documenten verwerkt, dient u de originelen te bewaren en deze te controleren op basis van de grenzen en acceptatie-items in de tekst.

Wat moet ik doen als er op de PDF-inhoudsopgave kan worden geklikt, maar de hiërarchie na extractie verloren gaat? Conclusie in één zin

Eerst verifiëren, dan schrijven: het bladwijzerniveau moet eerst worden gecontroleerd, het eerste item wordt als het eerste niveau beschouwd, de daaropvolgende niveaus mogen het vorige item plus één niet overschrijden, en vermeldingen met paginanummers die buiten het bereik vallen, worden niet geschreven.

jouw situatieAanbevolen praktijkenreden
Er kan op de mappagina worden geklikt en de hiërarchie is na extractie vlak of niet goed uitgelijnd.Gebruik eerst get_toc() om de originele lijst op te halen en verifieer deze vervolgens één voor één voordat u deze gebruikt.De originele lijst die door get_toc() wordt geretourneerd, heeft geen gestructureerde validatie
Het paginanummer is 0 of overschrijdt het totale aantal pagina'sGooi de vermelding weg en log inPaginanummers die buiten het bereik vallen, veroorzaken een sprongfout
get_toc() retourneert een lege lijstGebruik in plaats daarvan tekstlay-outanalyse en probeer het niet blindelings opnieuwHet bestand bevat mogelijk geen bladwijzermetagegevens
Dezelfde titel komt overeen met meerdere verschillende paginanummersMarkeer als dubbelzinnig, ga over op handmatige verificatieKan niet automatisch bepalen welk paginanummer correct is

Waarom verliest het extractieresultaat niveaus?

get_toc() geeft standaard een lijst met [level, title, page]-triples uit. Onder hen is page het fysieke paginanummer beginnend bij 1, en level vertegenwoordigt alleen de nestdiepte en garandeert geen continuïteit of wettigheid.

Als de bron-PDF is gegenereerd door een tool voor het samenvoegen van scans, zijn veelvoorkomende problemen onder meer:

  • Niveausprong: spring bijvoorbeeld rechtstreeks van 1 naar 3
  • Paginanummeruitzondering: het paginanummer is 0 of overschrijdt het totale aantal pagina's
  • Titeluitzondering: de titel bevat controletekens

Als het rechtstreeks voor downstream-taken wordt gebruikt, zal het verwarring veroorzaken in vertaalsegmenten of het mislukken van koppelingen. Nog verraderlijker is dat sommige PDF's een visuele inhoudsopgave hebben, maar geen ingebedde bladwijzermetagegevens. Het is normaal dat get_toc() op dit moment een lege lijst retourneert, en in plaats daarvan moet tekstlay-outanalyse worden gebruikt.

Op zichzelf staand compositievoorbeeld

Zie de importlijst voor bijvoorbeeld afhankelijkheden. De code vormt invoer in het geheugen, en runrecords worden afzonderlijk geleverd en vertegenwoordigen geen garantie voor alle echte bestanden.

import pymupdf
def validate(rows, pages):
    previous = 0
    for level, title, page in rows:
        if type(level) is not int or level < 1 or level > previous + 1:
            raise ValueError("invalid hierarchy")
        if type(page) is not int or not 1 <= page <= pages:
            raise ValueError("invalid destination")
        if not isinstance(title, str) or not title.strip():
            raise ValueError("empty title")
        previous = level
    return rows
with pymupdf.open() as doc:
    for _ in range(3):
        doc.new_page()
    rows = [[1, "Chapter", 1], [2, "Section", 2], [1, "Appendix", 3]]
    doc.set_toc(validate(rows, doc.page_count))
    assert doc.get_toc() == rows
    assert len(doc.get_toc()) == 3
    for bad in [[[2, "Bad", 1]], [[1, "Bad", 99]], [[1, "", 1]]]:
        try:
            validate(bad, doc.page_count)
        except ValueError:
            pass
        else:
            raise AssertionError("invalid outline accepted")

Verwerkingsregels voor legale en illegale inbreng

Correcte invoer moet voldoen aan: een lijst met triples met doorlopende niveaus en paginanummers in het bereik [1, doc.page_count]. [[1, "引言", 1], [2, "背景", 2], [1, "方法", 5]] is bijvoorbeeld legaal, het tweede niveau verschijnt na het eerste niveau en voldoet aan de syntaxis van de PDF-contouren.

Veelvoorkomende onjuiste invoer is onder meer:

  • Niveaus van 0 of negatief
  • Paginanummer is 0
  • Paginanummers overtreffen het totale aantal pagina's
  • De titel is een lege string of bevat slechts een spatie

De afhandelingsmethoden voor deze situaties zijn als volgt:

  1. Sla pagina's over met ongeldige pagina's en registreer waarschuwingen.
  2. Plaatsvervangers zoals [untitled] bewaren voor lege titels om structurele integriteit te behouden.
  3. Onderbreek de resolutie van de hele map niet door één enkele fout.

Voor gevallen met niveaus kleiner dan 1 moeten twee strategieën worden overwogen: de samenvatting van het voorbeeld pleit voor het afwijzen van illegale niveaus en het niet automatisch corrigeren ervan, terwijl de regels in de tekst 1 handhaven. De keuze tussen de twee is aan je eigen proces. Het moet ook worden opgemerkt dat deze regels zijn ontworpen om de robuustheid van downstreamprocessen te waarborgen en geen verplichte vereisten zijn van de PDF-standaard. Tests tonen aan dat wanneer paginanummers buiten de grenzen gaan, PyMuPDF waarschuwingen afdrukt maar geen uitzonderingen geeft, dus de validatiefunctie moet actief filteren en kan niet vertrouwen op bibliotheekgedrag.

📊 Kernvergelijking

De resultaten en aanbevolen afhandelingsmethoden voor get_toc() variëren afhankelijk van het document:

Documentstatusget_toc()-resultaatAanbevolen hantering
Gebookmarkt en structureel legaalStuur de tripletlijst terugDirect na verificatie gebruiken
Bladwijzers bestaan, maar de hiërarchie of het paginanummer is abnormaalGeeft een lijst van uitzonderingen terugFilter en registreer logboeken, en zet over op handmatig werk wanneer nodig
De visuele versie heeft een inhoudsopgavepagina maar geen bladwijzerTerug naar lege lijstOverschakelen naar tekstlay-outanalyse
Herschik documenten zoals EPUBHet paginanummerformaat is (hoofdstuk, pno)Deze logica voor verificatie van paginanummers is niet van toepassing en vereist speciale verwerking

Acceptatiecriteria en Grenzen voor handmatige beoordeling

De onderstaande tabel richt zich uitsluitend op de extractiefase van PDF-catalogusmetadata:

Observeer het fenomeenBeslissing om de zaak af te handelenOf automatisering geschikt is
Het paginanummer is 0 of groter dan het totale aantal pagina'sGooi de invoer weg en registreer dezeJa
Niveaus kleiner dan 1 of niet-gehele getallenBehandel volgens de bovenstaande regels (zie vorige uitleg)Ja
Titels zijn ofwel volledig blanco of puur symbolischVervang door [untitled]Ja
Springniveaus (bijv. 1 tot 3)Behou de oorspronkelijke lagen zonder de middelste lagen in te vullenJa (structureel legaal)
Dezelfde titel komt overeen met meerdere verschillende paginanummersGemarkeerd als ambigu, omgezet naar handmatigNee
Meer dan 200 vermeldingen zonder hiërarchische wijzigingenVermoedelijke OCR-misidentificatie vereist handmatige verificatieNee
Bevat externe URI- of JavaScript-actiesFilter niet-pagina-redirects eruitJa (Beveiligingsbeleid)
Herschik documenten zoals EPUB, paginanummer (hoofdstuk, pno)Deze logica voor het valideren van paginanummers is niet van toepassingNee (vereist speciale behandeling)

Let op dat de codedemonstratie alleen de structurele legaliteit controleert; end-to-end effecten moeten ook gecombineerd worden met rendering om de nauwkeurigheid van sprongen te verifiëren.

🎯 Welke methode past bij jou?

Als je mappen moet batch-extraheren

Voer eerst structurele validatie uit op de resultaten van get_toc(), schrijf deze vervolgens in volgende workflows en houd logs bij ter verificatie.

Als je PDF visueel een inhoudsopgave heeft maar leeg is geëxtraheerd

Probeer get_toc() niet herhaaldelijk; schakel over op tekstlay-out analyse en -verwerking.

Als je directoryvermelding dezelfde naam heeft maar verschillende pagina's

Controleer deze vermeldingen handmatig; selecteer niet automatisch een van de paginanummers.

Als je documenten wilt overdragen aan het vertaalproces,

Controleer eerst de juiste structuur en paginanummers voordat je vertaalt om verwarring in de alinea's te voorkomen.

❓ Veelgestelde Vragen (FAQ)

1. Waarom begint het paginanummer op 1, terwijl paginaindexen meestal op 0 beginnen?

Bladwijzers paginanummers zijn fysieke paginanummers die beginnen op 1, terwijl paginaindexen in bibliotheken zoals PyMuPDF meestal vanaf 0 beginnen. Dit verschil is belangrijk bij conversie, anders kunnen paginanummers niet goed uitgelijnd zijn.

2. get_toc(): Duidt het teruggeven van een lege lijst per se op een bestandsprobleem?

Niet per se. Sommige PDF's hebben visueel een inhoudsopgavepagina maar geen ingebedde bladwijzermetadata, dus het teruggeven van een lege lijst is normaal. In dit geval moet in plaats daarvan tekstlay-outanalyse worden gebruikt.

3. Als het paginanummer buiten de grenzen valt, rapporteert de bibliotheek dan direct een foutmelding?

Nee. Tests in dit artikel tonen aan dat PyMuPDF waarschuwingen afdrukt wanneer paginanummers buiten de grens gaan, maar geen uitzonderingen werpt, dus de validatiefunctie moet actief filteren.

4. Vereisen hiërarchische sprongen (zoals direct van 1 naar 3) het invullen van de middelste lagen?

De suggestie in het artikel is om de oorspronkelijke hiërarchie te behouden en de middelste lagen niet in te vullen, aangezien deze structuur nog steeds legitiem is.

📝 Samenvatting

De hiërarchie en paginanummers van PDF-mappen moeten worden gecontroleerd voordat ze worden gebruikt, dus de oorspronkelijke output van get_toc() kan niet direct als een betrouwbare structuur worden beschouwd. Bij het tegenkomen van ambiguïteiten of het ontbreken van bladwijzers, schakel dan direct over op handmatig werk of andere methoden om downstream procesfouten te voorkomen.

Ervaar nu: upload je document om te beginnen met vertalen, waarbij je de originele opmaak behoudt

Referenties en Volgende Stappen

De volgende stap is het voorbereiden van een test-PDF met bekende directoryproblemen, het uitvoeren van het bovenstaande verificatiescript en het berekenen van het aandeel van verschillende anomalieën. Als er vaak hiërarchische sprongen of paginanummer-offsets zijn, overweeg dan een stap voor de reconstructie van de inhoudsopgave vóór de vertaling toe te voegen.

Gebruik deze checklist voor documentvertaling

Controleer eerst zorgvuldig de paginavolgorde, bronlocatie en tekstintegriteit, en dien vervolgens hetzelfde desensitisatievoorbeeld in bij het vertaalproces. Na de vertaling is het nog steeds nodig om te controleren of de titel, hoofdtekst en bijschriften correct overeenkomen; het is niet voldoende om alleen te oordelen op de soepelheid van de tekst.

OmniDoc biedt portalen voor documentvertaling in meerdere formaten, en de officiële website introduceert OCR, glossaria en tweetalige referentiefuncties. Voor teams die direct vanaf de bestanden willen beginnen, is dit een pad dat de moeite waard is om te evalueren met echte monsters. Gebruik alstublieft het geanonimiseerde bestand dat u hebt geautoriseerd om te uploaden en de resultaten te verifiëren met de checklist in dit artikel. Dit beweert niet dat OmniDoc gebruikmaakt van de open-source bibliotheek of interne algoritmen uit dit artikel, noch vervangt het productprestatietesten door voorbeelden.

Bijgewerkt op 2026-11-15