Przed przekazaniem zadania tłumaczenia pliku PDF sprawdź najpierw czcionkę, zamiast spieszyć się z jej zmianą.
Domyślna lista czcionek ma inną długość niż krotka zwrócona przez full=True. Następnie przeczytaj pierwsze sześć elementów, a następnie sprawdź, czy bajty czcionki zwrócone przez ekstrakt_font są puste. Odniesienie do czcionki Base14 nie oznacza, że czcionka jest osadzona w programie; nie należy też uważać czcionek podzbioru za błąd.
Kiedy wiele osób otrzymuje plik PDF do przetłumaczenia, pierwszą rzeczą, o której myślą, jest bezpośrednia zmiana go na Siyuan Heibo lub Arial. Często powoduje to problemy podczas dostarczania: symbole matematyczne stają się kwadratami, numery tabel są źle wyrównane lub nie można otworzyć tłumaczenia w niektórych czytnikach. Ten artykuł jest napisany dla programistów i właścicieli dokumentów, którzy muszą przejąć zadanie tłumaczenia plików PDF. Po przeczytaniu będziesz wiedział, jak używać PyMuPDF do inwentaryzacji czcionek, jak interpretować zwracane wyniki i jakich wniosków nie można wyciągnąć na podstawie samego kodu wyjściowego.
Celem inwentaryzacji czcionek jest potwierdzenie technicznej możliwości edycji i stabilności renderowania, a nie przeprowadzenie audytu zgodności z prawem. Domyślna lista czcionek różni się od długości krotki zwróconej przez full=True. Podczas odczytu należy pobrać pierwszych sześć pozycji, a następnie sprawdzić, czy bajty czcionki zwrócone przez extract_font są puste. Odniesienia do czcionek Base14 nie oznaczają, że czcionka jest osadzona w programie, a podzbiór czcionek nie zawsze powinien być traktowany jako błąd.
Konkluzja w jednym zdaniu
Najpierw zinwentaryzuj czcionki, a następnie zdecyduj o ścieżce tłumaczenia. Nie zmieniaj czcionek globalnie przed wyodrębnieniem tekstu.
| twoja sytuacja | Zalecane praktyki | powód |
|---|---|---|
| Program czcionek jest pusty | Rekordy nie są pobierane do modułu osadzającego i nie potwierdzają sytuacji na stronie | Odniesienie Base14 nie jest równoznaczne z osadzoną czcionką |
| napotkać podzbiór czcionek | Zachowaj tożsamość czcionki | Czcionki podzbioru nie są równoznaczne z uszkodzeniem |
| Lista czcionek jest pusta | Potwierdź zawartość strony | Strona może być obrazem lub inną narysowaną ścieżką |
| Trzeba przetwarzać prawdziwe pliki | Najpierw sprawdź próbki odczulone | Przykładowy kod nie reprezentuje efektów na wszystkich rzeczywistych plikach |
Dlaczego nie możemy bezpośrednio zastępować czcionek na całym świecie?
Bezpośrednia wymiana czcionek napotka kilka typowych problemów:
- Symbole matematyczne w tekście oryginalnym stają się kwadratami.
- Wyrównanie liczb w tabeli o równej szerokości jest nieprawidłowe.
- Osadzone są ograniczone czcionki, co powoduje, że tłumaczenie nie otwiera się w niektórych czytnikach.
Dlatego przed rozpoczęciem wyodrębniania tekstu lub rekonstrukcji składu wykonaj inwentaryzację czcionek w dokumencie. `get_page_fonts()` to podstawowa sonda dostarczana przez PyMuPDF, która może powiedzieć, do jakich zasobów czcionek faktycznie odwołuje się każda strona, czy są one w pełni osadzone i jaki jest typ kodowania. Informacje te określają, czy w przyszłości należy zastosować OCR, bezpośrednią wymianę czy ręczną zmianę układu.
Kluczowe punkty dotyczące odczytywania informacji o czcionkach
- Domyślna lista czcionek ma inną długość niż krotka zwrócona przez
full=True, która jest odczytywana jako pierwsze sześć pozycji. - Gdy program czcionek jest pusty, oznacza to, że osadzone bajty czcionki nie są wyodrębniane.
- Czcionki podzbioru muszą jedynie zachować identyfikator czcionki i nie oceniają tego bezpośrednio jako błędu.
Testowanie syntetyczne: konstrukcja pamięci i weryfikacja asercji
Aby umożliwić działanie przykładu w izolacji, zbudowaliśmy w pełni samodzielny przypadek testowy. Zamiast polegać na plikach zewnętrznych, skrypt używa PyMuPDF do utworzenia pliku PDF zawierającego w pamięci standardowe czcionki, a następnie natychmiast dokonuje na nim inwentaryzacji czcionek. Zapewnia to nie tylko powtarzalność, ale także pozwala uniknąć zagrożeń związanych z prawami autorskimi i prywatnością.
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
Ten test ma jasne granice: „uszkodzony"lub „nieosadzony"obiekt czcionki syntetycznej nie może zostać skonstruowany w pamięci bez pobrania zewnętrznego pliku czcionki. Dlatego ten test koncentruje się na dwóch rzeczach: weryfikacji dokładności analizy normalnych osadzonych czcionek oraz defensywnej obsłudze nieprawidłowych numerów stron przez funkcję. Gałęzie wyjątków należy testować indywidualnie. Kod demonstracyjny działa w izolowanym środowisku, ale nie gwarantuje to wszystkich rzeczywistych plików ani wydajności produktu.
Kryteria akceptacji i granice ręcznego przeglądu
„Bezpieczne"lub „ostrzeżenie"wynikające z kodu są jedynie sygnałami technicznymi i nie można ich bezpośrednio utożsamiać z wykonalnością tłumaczenia. Skrypt może dokładnie raportować stan osadzania, ale nie jest w stanie stwierdzić, czy czcionka ma odpowiedni glif w języku docelowym, ani nie może ocenić, czy licencja pozwala na modyfikację osadzania. Decyzje te muszą zostać podjęte przez ludzi w kontekście projektu.
Konkretne decyzje dotyczące obsługi wyjątków
| przestrzegać | co robić | nie należy wnioskować |
|---|---|---|
| Program czcionek jest pusty | Rekordy nierozpakowane do programu osadzonego | Odniesienia do Base14 nie są tym samym co osadzenia |
| czcionka podzbioru | Zachowaj oznaczenia czcionki | Szkody nie są oceniane bezpośrednio |
| Lista jest pusta | Sprawdź zawartość strony | Może to być obraz lub inna ścieżka rysowania |
Przed zajęciem się ważnymi dokumentami prosimy o zachowanie oryginałów i przeglądanie ich zgodnie z powyższymi granicami i punktami akceptacji.
🎯 Która metoda ci odpowiada?
Jeśli tylko otrzymasz PDF do tłumaczenia
Najpierw sprawdź czcionki, a potem zdecyduj, którą drogę wybrać; nie spiesz się z ich wymianą.
Jeśli wynik wykrywania pokazuje, że program czcionki jest pusty
Nagraj to i potwierdź treść strony; nie zakładaj, że osadzenie jest zakończone.
Jeśli dokument zawiera czcionki podzbioru
Zachowaj oznaczenia czcionki i traktuj je normalnie, zamiast bezpośrednio oceniać jako błędy.
Jeśli wymagana jest weryfikacja przy użyciu prawdziwych dokumentów
Użyj próbki odwrażliwionej, którą przesłałeś za Twoją zgodą, i zweryfikowaj wyniki za pomocą punktów kontrolnych z tego artykułu.
❓ Najczęściej zadawane pytania (FAQ)
1. Czy odniesienie do czcionki Base14 oznacza, że czcionka jest już osadzona?
Nie. Odniesienia do czcionek w bazie 14 nie oznaczają, że program czcionek jest osadzony; musisz sprawdzić, czy bajty czcionki zwracane przezextract_font są puste.
2. Czy zdecydowanie jest problem z czcionką podzbioru?
Niekoniecznie. Czcionki podzbioru nie powinny być jednolicie oznaczane jako błędy; po prostu zachowaj identyfikatory czcionek i nie oceniaj ich bezpośrednio jako uszkodzone.
3. Jeśli lista czcionek jest pusta, czy to oznacza, że jest problem ze stroną?
Niekoniecznie. Gdy lista jest pusta, najpierw sprawdź zawartość strony; strona może być obrazem lub inną ścieżką rysowania.
4. Czy "bezpieczny" wynik scenariusza może być bezpośrednio wykorzystany do decyzji tłumaczeniowych?
Nie. Wyjście kodu jest jedynie sygnałem technicznym i nie może określić, czy glify języka docelowego są użyteczne, ani czy licencja pozwala na modyfikację osadzeń.
📝 Podsumowanie
Inwentaryzacja czcionek to podstawowy etap przed tłumaczeniem PDF; pomaga ocenić edytowalność dokumentu i stabilność renderowania. Po otrzymaniu pliku najpierw sprawdź czcionkę, następnie wybierz ścieżkę, a po tłumaczeniu nadal zweryfikowaj zgodność między tytułami, tekstem treści i podpisami.
Doświadczenie teraz: Prześlij dokument, aby zacząć tłumaczyć, zachowując oryginalne formatowanie


