Avant de confier la tâche de traduction PDF, vérifiez d'abord la police au lieu de vous précipiter pour changer la police.
La liste de polices par défaut a une longueur différente de celle du tuple renvoyé par full=True. Ensuite, lisez les six premiers éléments, puis vérifiez si les octets de police renvoyés par extract_font sont vides. Une référence de police Base14 ne signifie pas que la police est intégrée au programme ; les sous-ensembles de polices ne doivent pas non plus être considérés comme une erreur.
Lorsque de nombreuses personnes font traduire un PDF, la première chose à laquelle ils pensent est de le changer directement en Siyuan Heibo ou Arial. Cela provoque souvent des problèmes lors de la livraison : les symboles mathématiques deviennent des carrés, les numéros de tableau sont mal alignés ou la traduction ne peut pas être ouverte sur certains lecteurs. Cet article est destiné aux développeurs et aux propriétaires de documents qui doivent prendre en charge la tâche de traduction PDF. Après avoir lu, vous saurez comment utiliser PyMuPDF pour inventorier les polices, comment interpréter les résultats renvoyés et quelles conclusions ne peuvent pas être tirées sur la seule base de la sortie du code.
L’objectif de l’inventaire des polices est de confirmer la possibilité de modification technique et la stabilité du rendu, et non de mener un audit de conformité juridique. La liste de polices par défaut est différente de la longueur du tuple renvoyée par full=True. Lors de la lecture, les six premiers éléments doivent être pris, puis vérifier si les octets de police renvoyés par extract_font sont vides. Les références de police Base14 ne signifient pas que la police est intégrée au programme et les sous-ensembles de polices ne doivent pas toujours être traités comme une erreur.
Conclusion en une phrase
Inventoriez d’abord les polices, puis décidez du chemin de traduction. Ne modifiez pas globalement les polices avant d’extraire le texte.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
| Le programme de polices est vide | Les enregistrements ne sont pas extraits vers l'intégrateur et confirment la situation de la page | La référence Base14 n'est pas égale à la police intégrée |
| rencontrer des polices de sous-ensembles | Conserver l'identité de la police | Les polices de sous-ensembles ne sont pas synonymes de corruption |
| La liste des polices est vide | Confirmer le contenu de la page | La page peut être une image ou un autre chemin dessiné |
| Besoin de traiter de vrais fichiers | Vérifiez d'abord avec des échantillons désensibilisés | L'exemple de code ne représente pas les effets sur tous les fichiers réels |
Pourquoi ne pouvons-nous pas remplacer directement les polices globalement ?
Le remplacement direct des polices rencontrera plusieurs problèmes typiques :
- Les symboles mathématiques du texte original deviennent des carrés.
- L'alignement des nombres dans le tableau sur une largeur égale n'est pas valide.
- Des polices restreintes sont intégrées, ce qui empêche la traduction de s'ouvrir dans certains lecteurs.
Par conséquent, avant de lancer l’extraction de texte ou la reconstruction de la composition, effectuez un inventaire des polices du document. `get_page_fonts()` est la sonde sous-jacente fournie par PyMuPDF, qui peut vous indiquer quelles ressources de polices sont réellement référencées par chaque page, si elles sont entièrement intégrées et quel type d'encodage. Ces informations déterminent si l'OCR, le remplacement direct ou le réarrangement manuel doivent être utilisés à l'avenir.
Points clés de la lecture des informations sur les polices
- La liste de polices par défaut a une longueur différente de celle du tuple renvoyé par
full=True, qui est lu comme les six premiers éléments. - Lorsque le programme de polices est vide, cela signifie que les octets de polices incorporés ne sont pas extraits.
- Les polices de sous-ensemble doivent uniquement conserver l'identifiant de la police et ne le jugent pas directement comme une erreur.
Tests synthétiques : construction de mémoire et vérification d'assertions
Pour permettre à l'exemple de s'exécuter de manière isolée, nous avons construit un scénario de test entièrement autonome. Au lieu de s'appuyer sur des fichiers externes, le script utilise PyMuPDF pour créer un PDF contenant des polices standard en mémoire, puis effectue immédiatement un inventaire des polices. Cela garantit non seulement la reproductibilité, mais évite également les risques liés aux droits d’auteur et à la vie privée.
import pymupdf
with pymupdf.open() as doc:
page = doc.new_page()
page.insert_text((72, 72), "Font sample", fontname="helv")
fonts = doc.get_page_fonts(0, full=True)
assert fonts
report = []
for item in fonts:
xref, ext, kind, basefont, name, encoding = item[:6]
extracted_name, extracted_ext, extracted_type, data = doc.extract_font(xref)
report.append({"name": basefont, "font_program_present": bool(data),
"xref": xref, "encoding": encoding})
assert report[0]["name"] == "Helvetica"
assert report[0]["font_program_present"] is False
assert report[0]["xref"] > 0
Ce test a des limites claires : un objet police synthétique « corrompu » ou « non intégré » ne peut pas être construit en mémoire sans introduire un fichier de police externe. Par conséquent, ce test se concentre sur deux choses : la vérification de la précision de l'analyse des polices intégrées normales et la gestion défensive par la fonction des numéros de page non valides. Les branches d’exception doivent être testées individuellement. Le code de démonstration s'exécute dans un environnement isolé, mais cela ne représente pas une garantie de tous les fichiers réels ou des performances du produit.
Critères d'acceptation et limites de révision manuelle
Les sorties « sûr » ou « avertissement » d'un code ne sont que des signaux techniques et ne peuvent pas être directement assimilées à la faisabilité de la traduction. Le script peut signaler avec précision l'état de l'intégration, mais il ne peut pas dire si la police possède un glyphe correspondant dans la langue cible, ni évaluer si la licence autorise la modification de l'intégration. Ces décisions doivent être prises par des personnes dans le contexte du projet.
Décisions spécifiques de gestion des exceptions
| observer | ce qu'il faut faire | il ne faut pas en déduire |
|---|---|---|
| Le programme de polices est vide | Enregistrements non récupérés pour être intégrés | La citation en Base14 n'équivaut pas à l'intégration |
| police de sous-ensemble | Conserver l'identité de la police | Pas de détermination directe des dommages |
| La liste est vide | Confirmer le contenu de la page | Peut-être une image ou un autre chemin dessiné |
Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation ci-dessus.
🎯 Quelle méthode vous convient ?
Si vous venez de recevoir un PDF à traduire
Faites d’abord l’inventaire des polices avant de décider quel chemin emprunter. Ne vous précipitez pas pour remplacer les polices.
Si le résultat de la détection montre que le programme de polices est vide
Documentez-le et confirmez le contenu de la page, ne le traitez pas comme si l'intégration était terminée.
S'il y a des sous-ensembles de polices dans le document
Conservez le logo de la police et traitez-le comme une situation normale au lieu de le juger directement comme une erreur.
Si vous devez vérifier avec de vrais fichiers
Utilisez des échantillons désensibilisés que vous êtes autorisé à télécharger et revérifiez les résultats à l’aide des listes de contrôle de cet article.
❓ Questions fréquemment posées (FAQ)
1. La référence à la police Base14 signifie-t-elle que la police a été intégrée ?
Non. La référence de police Base14 ne signifie pas que le programme de polices a été intégré. Vous devez vérifier si les octets de police renvoyés par extract_font sont vides.
2. Y a-t-il un problème avec la police du sous-ensemble ?
incertain. Les polices de sous-ensembles ne doivent pas être considérées comme des erreurs. Conservez simplement le logo de la police et ne le jugez pas directement comme endommagé.
3. Si la liste des polices est vide, cela signifie-t-il qu'il y a un problème avec la page ?
incertain. Lorsque la liste est vide, vous devez d'abord confirmer le contenu de la page. La page peut être une image ou un autre chemin de dessin.
4. Les résultats « sûrs » d'un script peuvent-ils être utilisés directement dans les décisions de traduction ?
ne peut pas. La sortie du code n'est qu'un signal technique et ne peut pas dire si les glyphes de la langue cible sont disponibles ou si la licence autorise la modification de l'intégration.
📝Résumé
L'inventaire des polices est une étape fondamentale avant la traduction d'un PDF. Il vous aide à juger de la possibilité de modification et de la stabilité du rendu du document. Après avoir obtenu le fichier, vérifiez d’abord la police, puis sélectionnez le chemin. Après traduction, il reste à vérifier la correspondance entre le titre, le texte et la légende.


