Bevor Sie die PDF-Übersetzungsaufgabe übergeben, überprüfen Sie zunächst die Schriftart, anstatt die Schriftart überstürzt zu ändern.
Die Standardschriftartliste hat eine andere Länge als das von full=True zurückgegebene Tupel. Lesen Sie als Nächstes die ersten sechs Elemente und prüfen Sie dann, ob die von extract_font zurückgegebenen Schriftartbytes leer sind. Eine Base14-Schriftartreferenz bedeutet nicht, dass die Schriftart im Programm eingebettet ist; Auch Teilmengen von Schriftarten sollten nicht als Fehler betrachtet werden.
– Das Skript kann nur den Einbettungsstatus melden und Probleme mit Glyphen und Lizenzen in der Zielsprache müssen manuell beurteilt werden.
Wenn viele Leute eine PDF-Datei übersetzen lassen, denken sie als Erstes daran, sie direkt in Siyuan Heibo oder Arial umzuwandeln. Dies führt häufig zu Problemen bei der Zustellung: Mathematische Symbole werden zu Quadraten, Tabellennummern sind falsch ausgerichtet oder die Übersetzung kann in bestimmten Readern nicht geöffnet werden. Dieser Artikel richtet sich an Entwickler und Dokumentbesitzer, die die Aufgabe der PDF-Übersetzung übernehmen müssen. Nach der Lektüre wissen Sie, wie Sie mit PyMuPDF Schriftarten inventarisieren, wie Sie die zurückgegebenen Ergebnisse interpretieren und welche Schlussfolgerungen sich nicht allein aus der Codeausgabe ziehen lassen.
Der Zweck der Schriftarteninventur besteht darin, die technische Bearbeitbarkeit und Wiedergabestabilität zu bestätigen, und nicht darin, eine Prüfung der Rechtskonformität durchzuführen. Die Standardschriftartliste unterscheidet sich von der von full=True zurückgegebenen Tupellänge. Beim Lesen müssen die ersten sechs Elemente entnommen und anschließend überprüft werden, ob die von extract_font zurückgegebenen Schriftartbytes leer sind. Verweise auf Base14-Schriftarten bedeuten nicht, dass die Schriftart im Programm eingebettet ist, und Teilmengen von Schriftarten sollten nicht immer als Fehler behandelt werden.
Fazit in einem Satz
Führen Sie zunächst eine Bestandsaufnahme der Schriftarten durch und legen Sie dann den Übersetzungspfad fest. Ändern Sie die Schriftarten nicht global, bevor Sie den Text extrahieren.
| Ihre Situation | Empfohlene Praktiken | Grund |
|---|---|---|
| Das Schriftartenprogramm ist leer | Datensätze werden nicht in den Embedder extrahiert und bestätigen die Seitensituation | Base14-Referenz entspricht nicht der eingebetteten Schriftart |
| stoßen auf Teilmengen von Schriftarten | Behalten Sie die Schriftartidentität bei | Untergeordnete Schriftarten sind nicht gleichbedeutend mit Korruption |
| Die Schriftartenliste ist leer | Bestätigen Sie den Seiteninhalt | Die Seite kann ein Bild oder ein anderer gezeichneter Pfad sein |
| Es müssen echte Dateien verarbeitet werden | Prüfen Sie zunächst mit desensibilisierten Proben | Der Beispielcode stellt nicht die Auswirkungen auf alle echten Dateien dar |
Warum können wir Schriftarten nicht direkt global ersetzen?
Beim direkten Ersetzen von Schriftarten treten mehrere typische Probleme auf:
- Mathematische Symbole im Originaltext werden zu Quadraten.
- Die gleichbreite Ausrichtung der Zahlen in der Tabelle ist ungültig.
- Es sind eingeschränkte Schriftarten eingebettet, was dazu führt, dass die Übersetzung in einigen Readern nicht geöffnet wird.
Führen Sie daher vor Beginn der Textextraktion oder der Satzrekonstruktion eine Schriftarteninventur des Dokuments durch. `get_page_fonts()` ist die zugrunde liegende Sonde von PyMuPDF, die Ihnen sagen kann, welche Schriftartressourcen tatsächlich von jeder Seite referenziert werden, ob sie vollständig eingebettet sind und welchen Codierungstyp es gibt. Diese Informationen bestimmen, ob in Zukunft OCR, direkte Ersetzung oder manuelle Neuanordnung verwendet werden soll.
Wichtige Punkte beim Lesen von Schriftartinformationen
– Die Standardschriftartenliste hat eine andere Länge als das von full=True zurückgegebene Tupel, das als erste sechs Elemente gelesen wird.
- Wenn das Schriftartprogramm leer ist, bedeutet dies, dass die eingebetteten Schriftartbytes nicht extrahiert werden.
- Untergeordnete Schriftarten müssen nur die Schriftartenkennung beibehalten und sie nicht direkt als Fehler beurteilen.
Synthetisches Testen: Speicheraufbau und Behauptungsüberprüfung
Um Beispiele isoliert laufen zu lassen, haben wir einen vollständig in sich geschlossenen Testfall gebaut. Das Skript verlässt sich nicht auf externe Dateien; stattdessen verwendet es PyMuPDF, um im Speicher ein PDF mit Standardschriften zu erstellen und führt dann sofort eine Schriftinventarisierung darauf durch. Dies gewährleistet nicht nur die Reproduzierbarkeit, sondern vermeidet auch Urheberrechts- und Datenschutzrisiken.
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
Dieser Test hat klare Grenzen: Ohne externe Schriftdateien einzuführen, ist es unmöglich, "beschädigte" oder "nicht eingebettete" zusammengesetzte Schriftarten im Speicher zu konstruieren. Daher konzentriert sich dieser Test auf zwei Dinge: die Überprüfung der Parsinggenauigkeit korrekt eingebetteter Schriftarten und die defensive Handhabung ungültiger Seitenzahlen durch die Funktion. Ausnahmezweige müssen separat getestet werden. Demo-Code läuft in isolierten Umgebungen, aber das garantiert nicht die Leistung aller realen Dateien oder Produkte.
Annahmekriterien und Grenzen für manuelle Überprüfungen
Die "Sicherheit" oder "Warnung" in der Codeausgabe ist nur ein technisches Signal und kann nicht direkt mit Übersetzungsmachbarkeit gleichgesetzt werden. Skripte können den Einbettungsstatus genau angeben, können jedoch nicht feststellen, ob die Schriftart den Glyphen in der Zielsprache entspricht, noch beurteilen, ob die Lizenz Änderungen der Einbettungen erlaubt. Diese Entscheidungen müssen im Rahmen des Projekts von Menschen getroffen werden.
Spezifische Entscheidungen zur Bearbeitung von Ausnahmen
| Beobachtung | Was getan werden sollte | und sollte nicht beurteilt werden |
|---|---|---|
| Das Schriftprogramm ist leer | Datensätze, die nicht in das eingebettete Programm extrahiert wurden | Base14-Referenzen sind nicht dasselbe wie Embeddings |
| Ziji-Schrift | Schriftzeichen werden beibehalten | Schaden wird nicht direkt beurteilt |
| Die Liste ist leer | Überprüfen Sie den Seiteninhalt | Es könnte ein Bild oder ein anderer Zeichenpfad sein |
Bitte bewahren Sie vor der Handhabung wichtiger Dokumente die Originale auf und prüfen Sie sie gemäß den oben genannten Grenzen und Akzeptanzpunkten.
🎯 Welche Methode passt zu dir?
Wenn du einfach ein PDF zur Übersetzung erhältst,
Überprüfe zuerst die Schriftarten und entscheide dann, welchen Weg du einschlagen möchtest; überstürze dich nicht, sie zu ersetzen.
Wenn das Erkennungsergebnis zeigt, ist das Schriftprogramm leer
Zeichnen Sie dies auf und bestätigen Sie den Seiteninhalt; gehen Sie nicht davon aus, dass das Einbetten abgeschlossen ist.
Wenn das Dokument Teilmengenschriftarten enthält
Behalte die Schriftmarkierungen und behandle sie als normal, anstatt sie direkt als Fehler zu beurteilen.
Wenn eine Überprüfung mit echten Dokumenten erforderlich ist
Verwenden Sie die von Ihnen hochgeladene Desensibilisierungsprobe mit Ihrer Erlaubnis und überprüfen Sie die Ergebnisse mit den Checklistenpunkten in diesem Artikel.
❓ Häufig gestellte Fragen (FAQ)
1. Bedeutet die Base14-Schriftreferenz, dass die Schriftart bereits eingebettet ist?
Nein. Base14-Schriftreferenzen bedeuten nicht, dass das Schriftprogramm eingebettet ist; Sie müssen überprüfen, ob die von extract_font zurückgegebenen Schriftbytes leer sind.
2. Gibt es definitiv ein Problem mit der Subset-Schriftart?
Nicht unbedingt. Subset-Schriftarten sollten nicht einheitlich als Fehler markiert werden; behalten Sie einfach die Schriftkennungen und bewerten Sie sie nicht direkt als beschädigt.
3. Wenn die Schriftart leer ist, bedeutet das, dass es ein Problem mit der Seite gibt?
Nicht unbedingt. Wenn die Liste leer ist, überprüfen Sie zuerst den Seiteninhalt; die Seite kann ein Bild oder ein anderer Zeichenpfad sein.
4. Kann das "sichere" Ergebnis eines Skripts direkt für Übersetzungsentscheidungen verwendet werden?
Nein. Die Codeausgabe ist nur ein technisches Signal und kann nicht bestimmen, ob die Glyphen der Zielsprache nutzbar sind, noch kann sie bewerten, ob die Lizenz Änderungen der Einbettungen erlaubt.
📝 Zusammenfassung
Das Schriftartinventar ist ein grundlegender Schritt vor der PDF-Übersetzung; es hilft Ihnen, die Bearbeitungsfähigkeit und Wiederstellungsstabilität des Dokuments einzuschätzen. Nach Erhalt der Datei prüfen Sie zuerst die Schriftart, wählen Sie dann den Pfad aus und überprüfen Sie nach der Übersetzung weiterhin die Übereinstimmung zwischen Titeln, Fließtext und Bildunterschriften.


