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 situation | Pratiques recommandées | raison |
|---|---|---|
| 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 pages | Supprimer l'entrée et se connecter | Les numéros de page hors limites entraîneront un échec du saut |
get_toc() renvoie une liste vide | Utilisez plutôt l’analyse de la mise en page du texte et ne réessayez pas aveuglément | Le 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érents | Marquer comme ambigu, passer à la vérification manuelle | Impossible 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 :
- Ignorez les entrées avec des numéros de page non valides et enregistrez un avertissement.
- Conservez des espaces réservés tels que
[untitled]pour les titres vides afin de préserver l'intégrité structurelle. - 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 :
| Documentation | Résultat get_toc() | Manipulation recommandée |
|---|---|---|
| Favoris et structurellement légal | Retourner la liste des triplets | Utiliser directement après vérification |
| Les signets existent mais la hiérarchie ou le numéro de page est anormal | Retourne une liste d’exceptions | Filtrer 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 favori | Retour à la liste vide | Passage à l’analyse de la mise en page du texte |
| Réarranger des documents tels que l’EPUB | Le 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ène | Décision de traiter l’affaire | Si l’automatisation est appropriée |
|---|---|---|
| Le nombre de pages est de 0 ou supérieur au nombre total de pages | Supprimez l’entrée et enregistrez-la | Oui |
| Niveaux inférieurs à 1 ou non-entiers | Manipuler selon les règles ci-dessus (voir explication précédente) | Oui |
| Les titres sont soit complètement vierges, soit purement symboliques | Remplacez par [untitled] | Oui |
| Saut de niveau (par exemple, de 1 à 3) | Conservez les couches originales sans remplir les couches intermédiaires | Oui (structurellement légal) |
| Le même titre correspond à plusieurs numéros de page différents | Marqué comme ambigu, converti en manuel | Non |
| Plus de 200 entrées sans aucun changement hiérarchique | Une erreur suspectée d’identification OCR nécessite une vérification manuelle | Non |
| Inclut des actions externes sur URI ou JavaScript | Filtrer les redirections non-pages | Oui (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 applicable | Non (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.
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.


