Que dois-je faire si je peux cliquer sur la page de table des matières d'un PDF mais que je perds le niveau après extraction ?

La hiérarchie des signets doit être vérifiée avant d'écrire. Le premier élément est d'un niveau, et les éléments suivants peuvent être augmentés d'un niveau au maximum ; l'exemple rejette les niveaux illégaux et les numéros de page hors limites, et ne modifie pas automatiquement le niveau pour forger la structure des répertoires. Les numéros de page des signets commencent à un et les index des pages commencent généralement à zéro.

La page de table des matières du PDF peut être redirigée normalement dans le lecteur, mais après avoir été extraite à l'aide d'un script, la hiérarchie peut être plate, les numéros de page peuvent être mal placés, ou encore l'index peut être anormal. Ce type de problème est courant lors de la fusion de fichiers numérisés ou de fichiers comportant des structures de signets irrégulières. Si les résultats de l'extraction sont directement transmis aux utilisateurs en aval, des erreurs de segmentation et de liaison des traductions peuvent survenir.

Cet article est destiné aux développeurs et aux équipes de documentation qui doivent traiter par lots des catalogues PDF. Après lecture, vous pourrez comprendre la signification de la valeur de retour get_toc(), maîtriser les règles de vérification des niveaux et des numéros de page et savoir quelles situations doivent être converties en vérification manuelle. Cet article utilise un exemple synthétique pour démontrer la méthode de traitement, et le code a été vérifié par l'échantillon dans un environnement isolé, mais cela ne représente pas une garantie de tous les fichiers réels ou effets du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation du texte.

Que dois-je faire si l'on peut cliquer sur la page de la table des matières PDF, mais que la hiérarchie est perdue après l'extraction ? Conclusion en une phrase

Vérifiez d'abord, puis écrivez : le niveau du signet doit être vérifié en premier, le premier élément est considéré comme le premier niveau, les niveaux suivants ne doivent pas dépasser l'élément précédent plus un et les entrées avec des numéros de page hors limites ne seront pas écrites.

votre situationPratiques recommandéesraison
La page du répertoire peut être cliquée et la hiérarchie est plate ou mal alignée après l'extraction.Utilisez d'abord get_toc() pour obtenir la liste originale, puis vérifiez-la une par une avant de l'utiliser.La liste originale renvoyée par get_toc() n'a pas de validation structurée
Le numéro de page est 0 ou dépasse le nombre total de pagesSupprimer l'entrée et se connecterLes numéros de page hors limites entraîneront un échec du saut
get_toc() renvoie une liste videUtilisez plutôt l’analyse de la mise en page du texte et ne réessayez pas aveuglémentLe fichier ne contient peut-être pas de métadonnées de signet intégrées
Un même titre correspond à plusieurs numéros de page différentsMarquer comme ambigu, passer à la vérification manuelleImpossible de déterminer automatiquement quel numéro de page est correct

Pourquoi le résultat de l'extraction perd-il des niveaux ?

get_toc() génère par défaut une liste de triplets [level, title, page]. Parmi eux, page est le numéro physique de page commençant à 1, et level ne représente que la profondeur d'imbrication et ne garantit ni la continuité ni la légalité.

Si le PDF source a été généré par un outil de fusion et de numérisation, les problèmes courants incluent :

  • Level Jump : Par exemple, passez directement du 1 au 3
  • Exception relative au numéro de page : le numéro de page est 0 ou dépasse le nombre total de pages
  • Exception de titre : le titre contient des caractères de contrôle

S'il est utilisé directement pour des tâches en aval, cela entraînera une confusion dans les segments de traduction ou une défaillance des liens. Plus insidieusement, certains PDF ont une page de table des matières visuelle mais pas de métadonnées de signet intégrées. Il est normal que get_toc() renvoie une liste vide à ce moment-là, et l'analyse de la disposition du texte doit être utilisée à la place.

Exemple de composition autonome

Voir la liste d'importation pour des exemples de dépendances. Le code construit l'entrée en mémoire et les enregistrements d'exécution sont fournis séparément et ne représentent pas une garantie de tous les fichiers réels.

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")

Règles de traitement des entrées légales et illégales

Une saisie correcte doit satisfaire : une liste de triplets avec des niveaux continus et des numéros de page dans la plage [1, doc.page_count]. Par exemple, [[1, "引言", 1], [2, "背景", 2], [1, "方法", 5]] est légal, le deuxième niveau apparaît après le premier niveau et est conforme à la syntaxe du plan PDF.

Les entrées incorrectes courantes incluent :

  • Le niveau est 0 ou négatif
  • Le numéro de page est 0
  • Le nombre de pages dépasse le nombre total de pages
  • Le titre est une chaîne vide ou contient uniquement des espaces

Pour ces situations, les méthodes données dans l'article sont les suivantes :

  1. Ignorez les entrées avec des numéros de page non valides et enregistrez un avertissement.
  2. Conservez des espaces réservés tels que [untitled] pour les titres vides afin de préserver l'intégrité structurelle.
  3. N'interrompez pas l'analyse de l'ensemble du répertoire en raison d'une seule erreur.

Concernant le cas où le niveau est inférieur à 1, il y a deux stratégies à connaître : la partie résumé de l'exemple préconise de rejeter les niveaux illégaux et de ne pas les corriger automatiquement, tandis que la description de la règle dans l'article est de le forcer à 1. Merci de choisir entre les deux selon votre démarche. Notez également que ces règles sont conçues pour garantir la robustesse des processus en aval et ne constituent pas des exigences obligatoires de la norme PDF. Les tests réels ont révélé que lorsque le numéro de page franchit la limite, PyMuPDF imprime un avertissement mais ne lève pas d'exception. Par conséquent, la fonction de vérification doit filtrer activement et ne peut pas s’appuyer sur le comportement de la bibliothèque.

📊 Comparaison de base

Dans différentes situations de documents, les résultats et les méthodes de traitement suggérées de get_toc() sont différents :

DocumentationRésultat get_toc()Manipulation recommandée
Favoris et structurellement légalRetourner la liste des tripletsUtiliser directement après vérification
Les signets existent mais la hiérarchie ou le numéro de page est anormalRetourne une liste d’exceptionsFiltrer et enregistrer les journaux, puis transférer au travail manuel si nécessaire
La version visuelle comporte une table des matières mais pas de favoriRetour à la liste videPassage à l’analyse de la mise en page du texte
Réarranger des documents tels que l’EPUBLe format du numéro de page est (chapitre, pno)Cette logique de vérification du numéro de page n’est pas applicable et nécessite un traitement dédié

Critères d’acceptation et limites d’examen manuel

Le tableau ci-dessous se concentre uniquement sur l’étape d’extraction des métadonnées du catalogue PDF :

Observez le phénomèneDécision de traiter l’affaireSi l’automatisation est appropriée
Le nombre de pages est de 0 ou supérieur au nombre total de pagesSupprimez l’entrée et enregistrez-laOui
Niveaux inférieurs à 1 ou non-entiersManipuler selon les règles ci-dessus (voir explication précédente)Oui
Les titres sont soit complètement vierges, soit purement symboliquesRemplacez par [untitled]Oui
Saut de niveau (par exemple, de 1 à 3)Conservez les couches originales sans remplir les couches intermédiairesOui (structurellement légal)
Le même titre correspond à plusieurs numéros de page différentsMarqué comme ambigu, converti en manuelNon
Plus de 200 entrées sans aucun changement hiérarchiqueUne erreur suspectée d’identification OCR nécessite une vérification manuelleNon
Inclut des actions externes sur URI ou JavaScriptFiltrer les redirections non-pagesOui (politique de sécurité)
Réarranger des documents tels que l’EPUB, le numéro de page (chapitre, pno)Cette logique de validation des numéros de page n’est pas applicableNon (nécessite un traitement spécial)

Notez que la démonstration du code ne vérifie que la légalité structurelle ; les effets de bout en bout doivent également être combinés avec le rendu pour vérifier la précision des sauts.

🎯 Quelle méthode te convient ?

Si vous devez extraire des annuaires en lots

Commencez par effectuer une validation structurelle des résultats de get_toc(), puis les écrire dans les flux de travail suivants et conserver des journaux pour vérification.

Si votre PDF contient visuellement une table des matières mais est extrait vide

N’essayez pas get_toc() à répétition ; passez à l’analyse et au traitement de la mise en page du texte.

Si votre entrée de répertoire porte le même nom mais des pages différentes

Vérifiez manuellement ces entrées ; ne sélectionnez pas automatiquement un des numéros de page.

Si vous voulez confier les documents au processus de traduction,

Tout d’abord, vérifiez la structure correcte de la table des matières et les numéros de page avant de traduire afin d’éviter la confusion des paragraphes.

❓ Foire aux questions (FAQ)

1. Pourquoi le numéro de page commence-t-il à 1, alors que les index de pages commencent généralement à 0 ?

Les numéros de page de favoris sont des numéros de page physiques commençant à 1, tandis que les index de pages dans des bibliothèques comme PyMuPDF commencent généralement à 0. Cette différence est importante lors de la conversion, sinon les numéros de page peuvent être mal alignés.

2. get_toc() : Retourner une liste vide indique-t-il nécessairement un problème de fichier ?

Pas forcément. Certains PDF ont visuellement une page de table des matières mais pas de métadonnées de favoris intégrées, donc il est normal de renvoyer une liste vide. Dans ce cas, l’analyse de la mise en page du texte devrait être utilisée à la place.

3. Si le numéro de page dépasse les limites, la bibliothèque signalera-t-elle immédiatement une erreur ?

Non. Les tests de cet article montrent que PyMuPDF imprime des avertissements lorsque les numéros de page dépassent les limites mais ne lance pas d’exceptions, donc la fonction de validation doit filtrer activement.

4. Les sauts hiérarchiques (comme passer directement du 1 au 3) nécessitent-ils de remplir les couches intermédiaires ?

La suggestion dans l’article est de conserver la hiérarchie originale et de ne pas combler les couches intermédiaires, car cette structure reste légitime.

📝 Résumé

La hiérarchie et les numéros de pages des annuaires PDF doivent être vérifiés avant utilisation, de sorte que la sortie originale de get_toc() ne peut pas être considérée directement comme une structure fiable. En cas d’ambiguïtés ou d’absence de signets, passez rapidement au travail manuel ou à d’autres méthodes pour éviter les erreurs de processus en aval.

Faites l’expérience dès maintenant : téléchargez votre document pour commencer à traduire, tout en conservant la mise en forme originale

Références et prochaines étapes

L’étape suivante consiste à préparer un PDF de test contenant des problèmes de répertoire connus, à exécuter le script de vérification ci-dessus, et à calculer la proportion de diverses anomalies. S’il y a des sauts hiérarchiques fréquents ou des décalages de nombre de pages, envisagez d’ajouter une étape de reconstruction de la table des matières avant la traduction.

Utilisez cette liste de contrôle pour la traduction de documents

D’abord, vérifiez soigneusement l’ordre des pages, l’emplacement des sources et l’intégrité du texte, puis soumettez le même échantillon de désensibilisation au processus de traduction. Après traduction, il est toujours nécessaire de vérifier si le titre, le texte principal et les légendes correspondent correctement ; il ne suffit pas de juger uniquement à la fluidité du texte.

OmniDoc propose des portails de traduction de documents multi-formats, et le site officiel introduit des OCR, des glossaires et des fonctionnalités de référence bilingues. Pour les équipes qui veulent partir directement des fichiers, c’est une voie à évaluer avec de vrais échantillons. Veuillez utiliser le fichier anonymisé que vous avez autorisé pour télécharger et vérifier les résultats avec la liste de contrôle de cet article. Cela ne prétend pas qu’OmniDoc utilise la bibliothèque open source ou les algorithmes internes de cet article, ni ne remplace les tests de performance produit par des exemples.

Mis à jour le 2026-11-15