Voordat u de PDF-vertaaltaak overdraagt, controleert u eerst het lettertype in plaats van u te haasten om het lettertype te wijzigen.

De standaardlettertypenlijst heeft een andere lengte dan de tupel die wordt geretourneerd door full=True. Lees vervolgens de eerste zes items en controleer vervolgens of de lettertypebytes die door extract_font worden geretourneerd, leeg zijn. Een Base14-lettertypereferentie betekent niet dat het lettertype in het programma is ingebed; subset-lettertypen mogen ook niet als een fout worden beschouwd.

Wanneer veel mensen een pdf krijgen om te vertalen, is het eerste waar ze aan denken deze direct te wijzigen in Siyuan Heibo of Arial. Dit veroorzaakt vaak problemen tijdens de levering: wiskundige symbolen worden vierkanten, tabelnummers zijn niet goed uitgelijnd of de vertaling kan in bepaalde lezers niet worden geopend. Dit artikel is geschreven voor ontwikkelaars en documenteigenaren die de taak van het vertalen van PDF's moeten overnemen. Na het lezen weet u hoe u PyMuPDF kunt gebruiken om lettertypen te inventariseren, hoe u de geretourneerde resultaten moet interpreteren en welke conclusies u niet kunt trekken op basis van alleen de code-uitvoer.

Het doel van lettertype-inventarisatie is het bevestigen van de technische bewerkbaarheid en weergavestabiliteit, niet om een wettelijke nalevingsaudit uit te voeren. De standaardlettertypenlijst wijkt af van de tupellengte die wordt geretourneerd door full=True. Bij het lezen moeten de eerste zes items worden genomen en vervolgens worden gecontroleerd of de door extract_font geretourneerde lettertypebytes leeg zijn. Base14-lettertypereferenties betekenen niet dat het lettertype in het programma is ingebed, en het subsetten van lettertypen mag niet altijd als een fout worden behandeld.

Eén zin conclusie

Inventariseer eerst de lettertypen en bepaal vervolgens het vertaalpad. Wijzig de lettertypen niet globaal voordat u de tekst hebt geëxtraheerd.

jouw situatieAanbevolen praktijkenreden
Lettertypeprogramma is leegRecords worden niet naar de embedder geëxtraheerd en bevestigen de paginasituatieBase14-referentie is niet gelijk aan het ingesloten lettertype
subset-lettertypen tegenkomenBehoud de identiteit van het lettertypeSubsetlettertypen staan niet gelijk aan corruptie
De lettertypelijst is leegBevestig de pagina-inhoudDe pagina kan een afbeelding of een ander getekend pad zijn
Moet echte bestanden verwerkenControleer eerst met ongevoelig gemaakte monstersVoorbeeldcode vertegenwoordigt niet de effecten op alle echte bestanden

Waarom kunnen we lettertypen niet rechtstreeks wereldwijd vervangen?

Het rechtstreeks vervangen van lettertypen zal verschillende typische problemen tegenkomen:

  • Wiskundige symbolen in de originele tekst worden vierkanten.
  • De uitlijning van getallen met gelijke breedte in de tabel is ongeldig.
  • Er zijn beperkte lettertypen ingesloten, waardoor de vertaling in sommige lezers niet kan worden geopend.

Voer daarom, voordat u begint met het extraheren van tekst of het reconstrueren van zetwerk, een lettertype-inventarisatie van het document uit. `get_page_fonts()` is de onderliggende test van PyMuPDF, die u kan vertellen naar welke lettertypebronnen daadwerkelijk op elke pagina wordt verwezen, of ze volledig zijn ingebed en wat het coderingstype is. Deze informatie bepaalt of in de toekomst OCR, directe vervanging of handmatige herschikking moet worden gebruikt.

Belangrijke punten bij het lezen van lettertype-informatie

  • De standaardlettertypenlijst heeft een andere lengte dan de tupel die wordt geretourneerd door full=True, die wordt gelezen als de eerste zes items.
  • Als het lettertypeprogramma leeg is, betekent dit dat de ingebedde lettertypebytes niet worden geëxtraheerd.
  • Subset-lettertypen hoeven alleen de lettertype-ID te behouden en beoordelen dit niet direct als een fout.

Synthetische testen: geheugenconstructie en verificatie van beweringen

Om het voorbeeld geïsoleerd te laten draaien, hebben we een volledig op zichzelf staande testcase gebouwd. In plaats van te vertrouwen op externe bestanden, gebruikt het script PyMuPDF om een PDF te maken met standaardlettertypen in het geheugen en voert er vervolgens onmiddellijk een lettertype-inventarisatie op uit. Dit zorgt niet alleen voor reproduceerbaarheid, maar vermijdt ook auteursrecht- en privacyrisico's.

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

Deze test heeft duidelijke grenzen: een "beschadigd" of "niet-ingebed" synthetisch lettertypeobject kan niet in het geheugen worden geconstrueerd zonder een extern lettertypebestand binnen te halen. Daarom concentreert deze test zich op twee dingen: het verifiëren van de nauwkeurigheid van het parseren van normale ingesloten lettertypen, en de defensieve afhandeling van ongeldige paginanummers door de functie. Uitzonderingsvertakkingen moeten afzonderlijk worden getest. De democode draait in een geïsoleerde omgeving, maar dit biedt geen garantie voor alle echte bestanden of productprestaties.

Acceptatiecriteria en grenzen voor handmatige beoordeling

"Veilige" of "waarschuwings"-uitvoer van een code zijn slechts technische signalen en kunnen niet direct worden gelijkgesteld met de haalbaarheid van vertalingen. Het script kan de insluitingsstatus nauwkeurig rapporteren, maar kan niet zeggen of het lettertype een overeenkomstige glyph in de doeltaal heeft, noch kan het beoordelen of de licentie wijziging van de insluiting toestaat. Deze beslissingen moeten door mensen binnen de context van het project worden genomen.

Specifieke beslissingen over de afhandeling van uitzonderingen

observerenwat te doenmag niet worden afgeleid
Lettertypeprogramma is leegRecords zijn niet opgehaald naar de insluitingBase14-citeren is niet hetzelfde als insluiten
subset-lettertypeBehoud de identiteit van het lettertypeGeen directe vaststelling van schade
Lijst is leegBevestig de pagina-inhoudDit kan een afbeelding of een ander getekend pad zijn

Voordat u belangrijke documenten verwerkt, dient u de originelen te bewaren en deze te controleren volgens de bovenstaande grenzen en acceptatie-items.

🎯 Welke methode is geschikt voor jou?

Als u zojuist een te vertalen PDF heeft ontvangen

Inventariseer eerst de lettertypen voordat u beslist welk pad u moet volgen. Haast u niet om lettertypen te vervangen.

Als het detectieresultaat aangeeft dat het lettertypeprogramma leeg is

Documenteer dit en bevestig de pagina-inhoud. Behandel deze niet alsof de insluiting voltooid is.

Als er subset-lettertypen in het document aanwezig zijn

Bewaar het lettertypelogo en behandel het als een normale situatie in plaats van het direct als een fout te beoordelen.

Als u wilt verifiëren met echte bestanden

Gebruik ongevoelige monsters waarvoor u toestemming heeft om deze te uploaden en controleer de resultaten nogmaals met behulp van de checklists in dit artikel.

❓ Veelgestelde vragen (FAQ)

1. Betekent de Base14-lettertypereferentie dat het lettertype is ingesloten?

Nee. De verwijzing naar het Base14-lettertype betekent niet dat het lettertypeprogramma is ingesloten. U moet controleren of de door extract_font geretourneerde lettertypebytes leeg zijn.

2. Is er iets mis met het subsetlettertype?

onzeker. Subsetlettertypen mogen niet helemaal als fouten worden beoordeeld. Bewaar gewoon het lettertypelogo en beoordeel het niet direct als beschadigd.

3. Als de lettertypelijst leeg is, betekent dit dat er een probleem is met de pagina?

onzeker. Als de lijst leeg is, moet u eerst de pagina-inhoud bevestigen. De pagina kan een afbeelding of een ander tekenpad zijn.

4. Kunnen de "veilige" resultaten van een script rechtstreeks worden gebruikt bij vertaalbeslissingen?

kan niet. De code-uitvoer is slechts een technisch signaal en kan niet zeggen of de glyphs in de doeltaal beschikbaar zijn of dat de licentie wijziging van de insluiting toestaat.

📝 Samenvatting

Lettertype-inventarisatie is een basisstap vóór PDF-vertaling. Het helpt u de bewerkbaarheid en weergavestabiliteit van het document te beoordelen. Nadat u het bestand heeft opgehaald, controleert u eerst het lettertype en selecteert u vervolgens het pad. Na de vertaling moet u nog steeds de overeenstemming tussen de titel, tekst en legenda controleren.

Probeer het nu: upload het document om de vertaling te starten, waarbij de oorspronkelijke lay-out behouden blijft

Bijgewerkt op 2026-11-15