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 situatie | Aanbevolen praktijken | reden |
|---|---|---|
| Lettertypeprogramma is leeg | Records worden niet naar de embedder geëxtraheerd en bevestigen de paginasituatie | Base14-referentie is niet gelijk aan het ingesloten lettertype |
| subset-lettertypen tegenkomen | Behoud de identiteit van het lettertype | Subsetlettertypen staan niet gelijk aan corruptie |
| De lettertypelijst is leeg | Bevestig de pagina-inhoud | De pagina kan een afbeelding of een ander getekend pad zijn |
| Moet echte bestanden verwerken | Controleer eerst met ongevoelig gemaakte monsters | Voorbeeldcode 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
| observeren | wat te doen | mag niet worden afgeleid |
|---|---|---|
| Lettertypeprogramma is leeg | Records zijn niet opgehaald naar de insluiting | Base14-citeren is niet hetzelfde als insluiten |
| subset-lettertype | Behoud de identiteit van het lettertype | Geen directe vaststelling van schade |
| Lijst is leeg | Bevestig de pagina-inhoud | Dit 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.


