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 sytuacjaZalecane praktykipowód
Program czcionek jest pustyRekordy nie są pobierane do modułu osadzającego i nie potwierdzają sytuacji na stronieOdniesienie Base14 nie jest równoznaczne z osadzoną czcionką
napotkać podzbiór czcionekZachowaj tożsamość czcionkiCzcionki podzbioru nie są równoznaczne z uszkodzeniem
Lista czcionek jest pustaPotwierdź zawartość stronyStrona może być obrazem lub inną narysowaną ścieżką
Trzeba przetwarzać prawdziwe plikiNajpierw sprawdź próbki odczulonePrzykł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 pustyRekordy nierozpakowane do programu osadzonegoOdniesienia do Base14 nie są tym samym co osadzenia
czcionka podzbioruZachowaj oznaczenia czcionkiSzkody nie są oceniane bezpośrednio
Lista jest pustaSprawdź zawartość stronyMoż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

Zaktualizowano 2026-11-15