Mettez en surbrillance les mots recherchés dans le PDF, pourquoi le rectangle encadre-t-il incorrectement le texte en italique ?

Les polices italiques ne rendent pas nécessairement la zone du Quad recherché plus petite que le rectangle englobant. Lorsque vous devez conserver les informations de direction des quatre coins, utilisez directement le résultat de quads=True pour ajouter une mise en surbrillance ; n'utilisez aucun seuil de différence de zone pour déterminer si la mise en évidence est correcte.

Lorsque la zone de surbrillance de recherche pour le texte en italique est inclinée, ce n'est souvent pas parce qu'il y a un problème avec la police elle-même, mais parce que l'objet géométrique utilisé pour la surbrillance est mal sélectionné. Cet article est destiné aux développeurs qui utilisent PyMuPDF pour traiter le positionnement du texte PDF. Il explique pourquoi le rectangle englobant (Rect) ne peut pas être utilisé pour déterminer si la mise en surbrillance du texte en italique ou pivoté est correcte, et comment le gérer dans différentes situations.

Après avoir lu cet article, vous pouvez décider d'utiliser Quad ou Rect pour les résultats de recherche, savoir comment gérer l'absence de résultats, les lignes croisées, les résultats multiples et le recadrage CropBox lors de la recherche et comprendre quels problèmes dépassent la portée du positionnement géométrique.

Le texte intégral est démontré avec des échantillons synthétiques et le code a passé des contrôles d'échantillons 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, puis les examiner en fonction des limites et des éléments d'acceptation ci-dessous.

Pour rechercher la mise en surbrillance du texte en italique, choisissez Quad ou Rect ? Conclusion en une phrase

La police italique ne rend pas nécessairement la zone Quad obtenue par la recherche plus petite que le rectangle englobant. Lorsqu'il est nécessaire de conserver les informations de direction aux quatre coins, utilisez directement les résultats de quads=True pour ajouter des surbrillance. N'utilisez aucun seuil de différence de zone pour déterminer si la mise en surbrillance est correcte.

votre situationPratiques recommandéesraison
Texte en italique ou pivoté, l'orientation des quatre coins doit être conservéeUtilisez directement les résultats de quads=True pour ajouter des faits saillantsQuad conserve les informations d'orientation aux quatre coins
Je souhaite utiliser le seuil de différence de surface pour déterminer si la mise en évidence est correcte.ne fais pas çaLa police italique ne réduit pas nécessairement la taille de la zone Quad et le jugement du seuil n'est pas fiable.
Les termes de recherche s'étendent sur plusieurs lignes et le moteur ne les reconnaît pas comme la même unité de vocabulaire.Conservez tous les fragments Quad renvoyés et dessinez les faits saillants individuellementLa fusion forcée dans un Rect perdra la sémantique de l'espace blanc au milieu.
La page a un recadrage CropBoxVérifiez que le contenu est toujours dans la zone visible après la restauration de CropBoxLes coordonnées renvoyées par search_for sont basées sur l'espace de page d'origine non pivoté et ne peuvent pas être supposées que get_text ignore la zone recadrée par défaut
Plusieurs coupsConservez les numéros de page élément par élément et traitez-les un par unSeul le traitement du premier manquera les positions restantes

Pourquoi le texte en italique n'apparaît-il pas correctement ?

Beaucoup de gens supposeront par défaut que le rectangle de caractères italiques englobant est beaucoup plus grand que le Quad, donc utiliser Rect pour mettre en surbrillance provoquera une « déviation de cadre ». En fait, la police italique ne rend pas nécessairement la zone du Quad recherché plus petite que le rectangle englobant, il n'est donc pas fiable d'utiliser la différence de zone pour juger si la mise en évidence est correcte.

Ce qu’il faut réellement, c’est conserver les informations d’orientation des quatre coins. Quad enregistre ces informations, et son utilisation pour ajouter directement des reflets est plus fiable que l'utilisation d'un rectangle englobant pour deviner la forme.

Exemple de composition autonome

Voir la liste d'importation pour des exemples de dépendances. Le code construit les entrées en mémoire et ne nécessite pas d'exécution de fichiers externes. Les enregistrements d'opération sont fournis séparément et ne représentent pas une garantie que tous les documents sont authentiques.

import pymupdf
with pymupdf.open() as source:
    page = source.new_page(width=300, height=300)
    page.insert_text((100, 250), "Searchable", fontsize=14, rotate=90)
    hits = page.search_for("Searchable", quads=True)
    assert len(hits) == 1
    assert isinstance(hits[0], pymupdf.Quad)
    page.add_highlight_annot(hits)
    assert page.search_for("Missing", quads=True) == []
    raw = source.tobytes()
with pymupdf.open(stream=raw, filetype="pdf") as doc:
    page = doc[0]  # Keep the owning page alive while using annotations.
    annotations = list(page.annots())
    assert len(annotations) == 1
    assert len(annotations[0].vertices) == 4

Corriger le traitement des sorties et des entrées de limites

L'exemple synthétique ci-dessus génère un PDF en mémoire qui est utilisé pour vérifier le comportement du Quad. Vous trouverez ci-dessous plusieurs entrées de limites courantes.

1. Les mots recherchés s'étendent sur plusieurs lignes

Si le terme recherché s'étend sur les nouvelles lignes et que le moteur ne le reconnaît pas comme la même unité de vocabulaire, search_for peut renvoyer une liste vide ou ne faire correspondre que des fragments partiels.

  • Ne fusionnez pas de force plusieurs Quads non adjacents en un seul Rect, sinon la sémantique de l'espace blanc au milieu sera perdue.
  • Conservez tous les fragments Quad renvoyés et dessinez les faits saillants séparément.

2. Le terme de recherche contient des caractères spéciaux réguliers

Si un terme de recherche contient des caractères spéciaux normaux sans les échapper, les résultats risquent de ne pas être ceux attendus. La chaîne d'entrée doit être traitée en toute sécurité avant l'appel.

3. Recadrage CropBox

Si la page est recadrée CropBox, les coordonnées renvoyées par search_for sont toujours basées sur l'espace de la page d'origine non pivoté. Après avoir restauré la CropBox, vous devez vérifier que le contenu est toujours dans la zone visible. Vous ne pouvez pas supposer que get_text ignore la zone de recadrage par défaut.

Critères d'acceptation et limites de révision manuelle

Cette solution ne résout que le problème de positionnement géométrique. Les situations suivantes ne sont pas une question de choix entre Quad et Rect :

  • La couche de texte du PDF elle-même est endommagée ;
  • Intégration anormale des polices ;
  • Il y a des couches cachées.

Dans ces cas, les résultats de search_for peuvent ne pas être crédibles du tout et doivent être soumis à un examen manuel ou à une nouvelle OCR. L'exemple de code vérifie uniquement les propriétés géométriques et l'effet de bout en bout doit encore être évalué en fonction de types de documents spécifiques.

Décisions spécifiques de gestion des exceptions

observerce qu'il faut faireil ne faut pas en déduire
Recherche sans résultatVérifiez le calque de texte et les mots-clésNe créez pas de surlignages vides
Faire pivoter le texteGardez les coins quadruplesDeviner la précision sans différence de zone
Plusieurs coupsConserver les numéros de page élément par élémentNe vous contentez pas du premier

📊 Comparaison de base

objetInformations pouvant être conservéesScénarios applicablesChoses à noter
QuadQuatre coinsLes italiques et le texte pivoté nécessitent une mise en évidence préciseUtiliser directement les résultats de quads=True
Rect (rectangle encerclant)plage externeSélection de cadre simple pour le texte horizontalLe texte en italique ou pivoté peut être hors cadre et ne permet pas de juger de son exactitude.
Rect fusionnéportée globaleNon recommandé pour les recherches croiséesLa sémantique de l'espace blanc au milieu sera perdue

🎯 Quelle méthode vous convient ?

si tu……

  • Les quatre coins du texte doivent être conservés : utilisez directement les résultats de quads=True pour ajouter des surbrillances.
  • Si vous souhaitez utiliser le seuil de différence de surface pour déterminer si la mise en évidence est correcte : Ne faites pas cela. La police italique ne réduit pas nécessairement la taille de la zone Quad.
  • Terme de recherche lignes croisées rencontrées : conservez tous les fragments Quad, dessinez les surlignages séparément, ne fusionnez pas en un seul Rect.
  • Gestion des pages avec le recadrage CropBox : Après avoir restauré le CropBox, vérifiez que le contenu est toujours dans la zone visible.

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

Vérifiez d’abord l’ordre des pages, l’emplacement de la source et l’intégrité du texte, puis soumettez le même échantillon désensibilisé au processus de traduction. Après la traduction, il faut encore vérifier si le titre, le texte et les illustrations correspondent correctement. Vous ne pouvez pas simplement vérifier si le texte est fluide.

OmniDoc (portail produit) fournit un portail de traduction de documents multiformat et le site officiel présente des fonctions d'OCR, de glossaire et de comparaison bilingue. Pour les équipes qui souhaitent travailler directement à partir des fichiers, il s’agit d’une voie qui mérite d’être évaluée avec des échantillons réels. Veuillez utiliser les fichiers désensibilisés que vous êtes autorisé à télécharger et utilisez les éléments de vérification de cet article pour examiner les résultats. Rien ne prétend ici qu'OmniDoc utilise les bibliothèques open source ou les algorithmes internes mentionnés dans cet article, et les exemples ne remplacent pas les tests de performances du produit.

Références

❓ Questions fréquemment posées (FAQ)

1. Le texte en italique réduira-t-il définitivement la zone Quad ?

incertain. La police italique ne rend pas nécessairement la zone du Quad recherché plus petite que le rectangle englobant, vous ne pouvez donc pas vous fier à la différence de zone pour déterminer si la mise en évidence est correcte.

2. Quand les informations sur les coins quad doivent-elles être conservées ?

Lorsque vous devez conserver les informations de direction des quatre coins, vous devez utiliser directement les résultats de quads=True pour ajouter des surbrillances.

3. Le terme recherché traverse les lignes et aucun résultat n'est trouvé. Que dois-je faire?

Ne créez pas de surlignages vides, vérifiez d'abord le calque de texte et les mots-clés. Si seuls quelques fragments sont renvoyés, tous les fragments Quad renvoyés doivent être conservés et les surbrillances dessinées séparément, plutôt que d'être forcées dans un seul Rect.

4. À quoi devez-vous faire attention lorsque vous recadrez la page avec CropBox ?

Les coordonnées renvoyées par search_for sont toujours basées sur l'espace de page d'origine non pivoté. Après avoir restauré la CropBox, vous devez vérifier que le contenu est toujours dans la zone visible. Vous ne pouvez pas supposer que get_text ignore la zone de recadrage par défaut.

📝Résumé

La mise en évidence du texte en italique et en rotation doit être basée sur Quad, et les numéros de page et les informations aux quatre coins doivent être conservés élément par élément. Les problèmes tels que l'endommagement de la couche de texte et l'intégration anormale des polices nécessitent toujours un examen manuel ou une nouvelle OCR.

Téléchargez gratuitement OmniDoc Desktop : documents, feuilles de calcul, présentations et PDF en un seul endroit

Mis à jour le 2026-11-13