Le PDF peut être visualisé mais pas copié, il se peut qu'il ne s'agisse pas d'une numérisation : vérifiez d'abord le calque de texte et le mappage des caractères
S'il n'y a pas de texte, il ne peut pas être directement jugé comme « le calque de texte est normal », ni comme une copie numérisée. Le texte, les caractères alternatifs et les références d'image de page sont enregistrés ci-dessous respectivement, et l'état à examiner est affiché ; les références d'images ne prouvent pas que l'image a couvert la totalité de la page ou que le texte est identifiable.
Si vous pouvez voir le texte dans le PDF mais que vous ne parvenez pas à le copier, il se peut qu'il ne s'agisse pas d'une copie numérisée ou qu'il y ait un problème avec le mappage des caractères. Cet article est destiné aux développeurs et aux processeurs de documents qui ont besoin d'extraire, de traduire ou de structurer du contenu PDF. Après avoir lu, vous saurez d'abord comment distinguer les problèmes au niveau du texte et le contenu des images, et utiliser des signaux unifiés pour déterminer la marche à suivre ensuite.
Le code et les exemples utilisés ici utilisent des échantillons synthétiques qui ont passé avec succès des contrôles d'échantillons dans un environnement isolé et ne représentent pas une garantie de tous les fichiers réels ou des performances 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.
Le PDF peut être visualisé mais pas copié. Est-ce une copie scannée ? Conclusion en une phrase
Je ne peux pas juger directement. Vérifiez d'abord la couche de texte et le mappage des caractères, puis regardez l'image de la page et déterminez enfin s'il s'agit d'une numérisation ou d'un échec de mappage.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
| Peut voir le texte, copier des caractères tronqués ou des espaces vides | Vérifiez le mappage ToUnicode et l’encodage des polices | Le visuel est normal mais le calque de texte est cassé, principalement à cause d'un mappage manquant ou erroné. |
| Les caractères copiés semblent raisonnables mais ont une sémantique incorrecte | Vérifier les résultats de l'extraction par rapport au contenu visuel | Le mappage heuristique peut générer des caractères erronés et réussir une vérification non nulle |
| Il n'y a pas de texte, mais il y a des images sur la page | Vérifiez si l'image contient du texte, puis déterminez si l'OCR est requis | Les citations d'images n'équivalent pas à des numérisations d'une page entière et ne prouvent pas non plus que le texte est lisible. |
| Ni le texte ni les images ne sont extraits | Afficher le contenu du dessin de la page | Il n'y a aucun moyen de conclure que la page est vierge |
Pourquoi le code copié est-il tronqué ?
Les utilisateurs peuvent voir le texte normalement dans le navigateur ou le lecteur, mais le texte copié est tronqué, vide ou contient des symboles non pertinents. Il ne s’agit généralement pas d’un fichier endommagé, ni nécessairement d’une copie numérisée. La cause première est que le glyphe (Glyph) vers la table de mappage Unicode (ToUnicode CMap) à l'intérieur du PDF est manquant ou erroné.
Les moteurs de rendu s'appuient sur des index de glyphes pour dessiner du contenu visuel, tandis que les outils de presse-papiers et d'extraction de texte s'appuient sur des tables de mappage pour restaurer les caractères sémantiques. Lorsque les deux sont rompus, une couche de mauvais texte « visuellement normale, illisible par machine » apparaît.
Avant d'effectuer une traduction de document ou une extraction structurée, vous devez d'abord confirmer si le problème réside dans le mappage ou si la page elle-même est une image. Sinon, les processus OCR ou NLP ultérieurs seront basés sur des prémisses erronées.
Mécanisme de rupture entre l'index des glyphes et le mappage Unicode
La spécification PDF permet aux polices d'intégrer uniquement les informations de contour et de largeur des glyphes, mais pas le mappage d'encodage des caractères. Les conditions suivantes peuvent provoquer une casse :
- Le logiciel qui génère des PDF n'écrit pas correctement la table ToUnicode
- Un encodage personnalisé est utilisé mais aucune règle de décodage n'est fournie
À l’heure actuelle, l’extracteur ne peut obtenir que l’ID de glyphe d’origine (CID). Ces identifiants sont significatifs pour le moteur de rendu mais n'ont aucune valeur pour le traitement de texte.
Certains outils utilisent des algorithmes heuristiques pour deviner les correspondances, ce qui donne des caractères qui semblent raisonnables mais sont en réalité incorrects, comme la conversion de la ponctuation chinoise en lettres latines ou le remplacement de chiffres par des contrôleurs. Ce type de « pseudotexte » est encore plus caché que les espaces vierges purs, car il peut faire passer des chèques non vierges mais provoque une pollution silencieuse des données en aval.
La clé pour juger de tels problèmes n’est pas de savoir si le texte est sélectionné, mais de vérifier si la sémantique de la chaîne extraite correspond au contenu visuel.
Utilisation de PyMuPDF pour le diagnostic de synthèse mémoire
Le code suivant construit l’entrée en mémoire et vérifie la logique de diagnostic :
from io import BytesIO
from PIL import Image
import pymupdf
def inspect(page):
text = page.get_text().strip()
images = page.get_images()
if "\ufffd" in text:
state = "review_replacement_characters"
elif text:
state = "text_present_needs_semantic_review"
elif images:
state = "image_without_extracted_text"
else:
state = "empty_text_needs_review"
return {"state": state, "characters": len(text), "image_refs": len(images)}
with pymupdf.open() as doc:
doc.new_page().insert_text((50, 50), "Text sample")
doc.new_page()
picture = BytesIO()
Image.new("RGB", (16, 16), "red").save(picture, format="PNG")
doc.new_page().insert_image(pymupdf.Rect(10, 10, 100, 100), stream=picture.getvalue())
assert inspect(doc[0])["state"] == "text_present_needs_semantic_review"
assert inspect(doc[1])["state"] == "empty_text_needs_review"
assert inspect(doc[2])["state"] == "image_without_extracted_text"
assert inspect(doc[2])["characters"] == 0
Dans le code ci-dessus, la fonction diagnose_text_layer récupère le texte original via get_text("text"), utilise unicodedata.category pour filtrer les caractères et espaces de contrôle, et calcule la proportion de contenu valide. En même temps, il détecte la présence de blocs d’image via get_text("blocks").
Les deux affirmations confirment deux scénarios : le taux d’impression d’un document normal est supérieur à 0,9, et le nombre de caractères du document scannée est nul. Cela couvre la logique de branchement de base.
Il convient de noter que ce diagnostic repose uniquement sur des caractéristiques statistiques. Pour les polices chiffrées ou les encodages spéciaux, une vérification manuelle reste nécessaire.
📊 Comparaison des noyaux
Le tableau ci-dessous liste les instructions d’inspection correspondant à différents signaux, ainsi que les conclusions qui ne doivent pas être tirées :
| Signal | L’étape suivante est de vérifier | Conclusions qui ne devraient pas être tirées |
|---|---|---|
| Il existe un texte imprimable | Vérifiez la sémantique, l’ordre et les sources | Si vous pouvez l’extraire, cela signifie qu’il est correct |
| Il existe des personnages alternatifs | Encodage de révision et mappage de polices | Tous les personnages ont été perdus |
| Il y a des photos mais pas de texte | Vérifiez si l’image contient du texte | Il faut que ce soit un scan pleine page |
| Ni le texte ni les images n’ont été détectés | Voir les dessins de la page | Ça doit être une page blanche |
🎯 Quelle méthode te convient ?
Si tu peux voir le texte mais ne peux pas le copier
Priorisez la vérification des correspondances ToUnicode et des codages de police, qui sont généralement causés par des ruptures de carte.
Si le texte copié semble normal mais contient des erreurs,
Utilisez du contenu visuel pour comparer et extraire les résultats paragraphe par paragraphe ; ne vous contentez pas de vérifier si ce n’est pas nul.
Si la page n’a que des images et pas de texte
Vérifiez si l’image contient du texte, puis décidez si l’OCR est nécessaire. Ne supposez pas que toute la page est un scan.
Si vous préparez la traduction de documents
Commencez par effectuer la vérification de l’intégrité du texte, puis remettez l’échantillon désensibilisé au processus de 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 (entrée produit) propose un portail de traduction de documents multiformat, avec le site officiel introduisant des OCR, des glossaires et des fonctionnalités de référence bilingues. Si vous souhaitez partir directement du fichier, vous pouvez évaluer ce chemin avec des échantillons réels.
Veuillez utiliser le fichier anxieux que vous avez le droit de télécharger et vérifier les résultats de la liste de contrôle de cet article. Cela ne prétend pas qu’OmniDoc utilise les bibliothèques open source ou les algorithmes internes mentionnés dans cet article, ni ne remplace les tests de performance produit par des exemples.
❓ Foire aux questions (FAQ)
1. Si vous pouvez extraire du texte, cela signifie-t-il que le calque texte est correct ?
Non. Le contenu extrait doit également être vérifié pour la sémantique, l’ordre et la source, et si la correspondance est incorrecte, elle peut produire des caractères apparemment raisonnables.
2. S’il y a des images sur la page, cela veut-il dire qu’il s’agit d’un scan ?
Pas forcément. Les références d’image ne prouvent pas que l’image couvre toute la page, ni que le texte peut être reconnu ; vous devez vérifier si l’image contient du texte.
3. Si ni texte ni images ne sont détectés, cela signifie-t-il que la page est vierge ?
Aucune conclusion ne peut être tirée de cela. Vous devriez vérifier le rendu de la page avant de porter un jugement.
4. Ce script de diagnostic peut-il être utilisé pour tous les PDF ?
Non. Il repose uniquement sur des caractéristiques statistiques ; les polices chiffrées ou les encodages spéciaux nécessitent toujours une vérification manuelle.
📝 Résumé
Les PDF peuvent être lus mais pas copiés ; vérifiez d’abord les calques de texte et les correspondances de caractères, puis regardez le contenu de l’image, et enfin déterminez s’il s’agit d’une copie numérisée. Avant le traitement, conservez les documents originaux et examinez chaque élément avec les éléments d’inspection.
Lectures complémentaires
-Explication détaillée de l’extraction de texte PyMuPDF -Page officielle du document PyMuPDF


