Rozwiązywanie problemów z czcionkami, podzbiorami i tagowaniem
Te wpisy opisują niepowodzenia wykrywania i parsowania czcionek zgłaszane przez NextPDF\Exception\FontNotFoundException i NextPDF\Exception\FontParsingException. Obejmują też diagnostykę pokrycia chińskiego, japońskiego i koreańskiego (CJK) oraz problemy z drzewem struktury, które wpływają na tagowane wyjście. Każdy wpis wskazuje dokładny wyjątek lub test, dzięki czemu można zweryfikować przyczynę.
Wpis: nie znaleziono czcionki
Dział zatytułowany „Wpis: nie znaleziono czcionki”- Objaw.
FontNotFoundExceptionz komunikatem w postaciFont "<name>" not found. Searched: [<paths>]. - Prawdopodobna przyczyna. Żądana rodzina czcionek albo ścieżka pliku nie istnieje, jest nieczytelna lub znajduje się w katalogu czcionek niedostępnym dla środowiska uruchomieniowego. Dane czcionki mogą być poprawne, ale silnik nadal nie może uzyskać do nich dostępu.
- Dowody / diagnoza.
getContext()zwracafont_name,search_pathsifallback_attempted. Użyjsearch_paths, aby sprawdzić każdą lokalizację, którą silnik wypróbował. Użyjfallback_attempted, aby potwierdzić, czy użycie czcionki zapasowej zostało już wypróbowane. - Rozwiązanie.
- Porównaj żądaną wartość
font_namez faktycznie obecnym plikiem czcionki. - Dodaj katalog zawierający czcionkę do skonfigurowanych katalogów czcionek lub popraw przekazaną ścieżkę.
- Sprawdź, czy użytkownik środowiska uruchomieniowego może odczytać plik.
- Uruchom wywołanie ponownie.
- Porównaj żądaną wartość
- Powiązane. Dokumentacja wyjątków.
Wpis: plik czcionki nie daje się sparsować
Dział zatytułowany „Wpis: plik czcionki nie daje się sparsować”- Objaw.
FontParsingExceptionz komunikatem w postaciFailed to parse font file "<file>": <reason>. - Prawdopodobna przyczyna. Silnik znalazł plik czcionki, lecz nie może wykorzystać jego zawartości: obcięty nagłówek, nieprawidłowy katalog tablic albo brak obowiązkowej tablicy, takiej jak
head,hhealubOS/2. - Dowody / diagnoza.
getContext()zwracafont_fileiparse_error.parse_errorwskazuje problem strukturalny. - Rozwiązanie.
- Odczytaj
parse_error, aby zidentyfikować defekt strukturalny. - Zastąp plik czcionki zweryfikowaną kopią tego samego kroju.
- Uruchom wywołanie ponownie.
- Odczytaj
- Powiązane. Dokumentacja wyjątków.
Wpis: tworzenie podzbioru nie powiodło się z powodu uszkodzonej tablicy czcionki
Dział zatytułowany „Wpis: tworzenie podzbioru nie powiodło się z powodu uszkodzonej tablicy czcionki”- Objaw.
FontParsingException, gdyfont_filema wartośćfont-subset, aparse_errorma wartość taką jakInvalid head table: too short,Invalid hhea table: too short,Invalid maxp table: too shortlubFailed to unpack font data. - Prawdopodobna przyczyna. Czcionka przeszła początkowe wczytanie, lecz tablica potrzebna do utworzenia podzbioru jest obcięta lub nie można jej rozpakować. Mechanizm tworzenia podzbiorów odrzuca czcionkę, zamiast wygenerować uszkodzony podzbiór.
- Dowody / diagnoza. Jeśli tablica
head,hhealubmaxpjest zbyt krótka albo rozpakowanie się nie powiedzie,src/Typography/FontSubsetter.phpzgłaszaFontParsingException, podając jako nazwę pliku dosłowny tokenfont-subset. Token informuje, że niepowodzenie wystąpiło podczas tworzenia podzbioru, a nie podczas początkowego wczytywania. - Rozwiązanie.
- Zastąp źródłową czcionkę kompletną, nieobciętą kopią tego samego kroju.
- Jeśli czcionkę generuje narzędzie kompilacji, wygeneruj ją ponownie i sprawdź, czy tablice
head,hheaimaxpsą kompletne. - Uruchom kompilację ponownie.
- Powiązane. Walidacja PDF/A i PDF/UA.
Wpis: tekst CJK renderuje się z brakującymi glifami
Dział zatytułowany „Wpis: tekst CJK renderuje się z brakującymi glifami”- Objaw. Tekst chiński, japoński lub koreański renderuje się jako puste prostokąty lub brakujące znaki, a pokrycie CJK przez czcionkę jest niepewne.
- Prawdopodobna przyczyna. Wybrana czcionka nie obejmuje bloków Unicode wymaganych przez dane pismo. Każde pismo CJK wymaga określonych bloków oprócz wspólnych bloków ideogramów.
- Dowody / diagnoza.
src/Typography/CjkFontValidator.phpudostępniavalidateCoverage(FontInfo $font, CjkScript $script). Metoda zwracaCjkCoverageResultz odsetkiem pokrycia oraz listą bloków poniżej 50% progu raportowania. Walidator próbkuje punkty kodowe. Jest narzędziem diagnostycznym i nie zmienia wczytywania czcionek. - Rozwiązanie.
- Uruchom
CjkFontValidator::validateCoverage()dla danej czcionki i docelowego pisma. - Odczytaj
missingRanges, aby zobaczyć, które bloki nie są pokryte, na przykład Bopomofo dla chińskiego tradycyjnego, hiragana i katakana dla japońskiego oraz sylaby hangul dla koreańskiego. - Wybierz czcionkę obejmującą te bloki lub dodaj czcionkę zapasową, która je obejmuje.
- Uruchom renderowanie ponownie i ponownie sprawdź pokrycie.
- Uruchom
- Powiązane. Dokumentacja wyjątków.
Wpis: predefiniowana mapa CMap nie pasuje do pisma CJK
Dział zatytułowany „Wpis: predefiniowana mapa CMap nie pasuje do pisma CJK”- Objaw. Tekst CJK mapuje się na niewłaściwe glify lub dokument używa predefiniowanej mapy CMap, która nie pasuje do jego języka.
- Prawdopodobna przyczyna. Wykryte pismo określa nazwę predefiniowanej mapy CMap firmy Adobe. Czcionka obejmująca tylko wspólny blok ideogramów, bez bloku specyficznego dla pisma, jest zgodnie z założeniem wykrywana jako chiński uproszczony.
- Dowody / diagnoza.
CjkFontValidator::detectScript()zwraca wykryte pismo, aresolvePredefinedCMapName()je mapuje: chiński uproszczony naUniGB-UTF16-H, chiński tradycyjny naUniCNS-UTF16-H, japoński naUniJIS-UTF16-Hi koreański naUniKS-UTF16-H. Jeśli nie ma żadnego bloku specyficznego dla pisma, wykrywanie wraca do chińskiego uproszczonego. - Rozwiązanie.
- Potwierdź, że czcionka zawiera blok specyficzny dla pisma: Bopomofo dla chińskiego tradycyjnego, hiragana lub katakana dla japońskiego oraz hangul dla koreańskiego.
- Jeśli dokument jest w chińskim tradycyjnym, lecz czcionka nie ma bloku Bopomofo, wybierz czcionkę, która go zawiera, aby wykrywanie rozpoznało zamierzone pismo.
- Uruchom renderowanie ponownie.
- Powiązane. Dokumentacja wyjątków.
Wpis: tagowana zawartość nie tworzy użytecznego drzewa struktury
Dział zatytułowany „Wpis: tagowana zawartość nie tworzy użytecznego drzewa struktury”- Objaw. Kompilacja z tagowaniem nie tworzy drzewa struktury lub kolejna kontrola dostępności zgłasza puste albo brakujące drzewo struktury.
- Prawdopodobna przyczyna. Kompilacja wygenerowała zawartość poza ścieżką tagowania, więc nie utworzyła żadnych elementów struktury. Drzewo struktury pozostaje puste.
- Dowody / diagnoza.
src/Accessibility/StructureTree.phpisrc/Accessibility/TaggedContentEmitter.phpbudują drzewo struktury z tagowanej zawartości. Testtests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.phppotwierdza, że puste drzewo struktury nie deklaruje zgodności z PDF/UA-2. - Rozwiązanie.
- Potwierdź, że zawartość jest generowana przez ścieżkę tagowania, aby elementy struktury były tworzone.
- Sprawdź, czy każda sekwencja oznaczonej zawartości jest mapowana na element struktury.
- Uruchom kompilację ponownie i sprawdź drzewo struktury.
- Powiązane. Walidacja PDF/A i PDF/UA.
Wpis: znacznik języka elementu struktury jest odrzucany
Dział zatytułowany „Wpis: znacznik języka elementu struktury jest odrzucany”- Objaw. Kompilacja kończy się niepowodzeniem, ponieważ wartość języka w elemencie struktury lub w dokumencie nie jest prawidłowym znacznikiem.
- Prawdopodobna przyczyna. Podana wartość języka nie jest prawidłowym znacznikiem BCP 47. Walidator odrzuca nieprawidłowe znaczniki, zamiast je generować.
- Dowody / diagnoza.
src/Accessibility/Bcp47Validator.phpsprawdza poprawność znacznika. Nieprawidłowy znacznik powoduje zgłoszeniesrc/Accessibility/InvalidBcp47TagException.php.tests/Unit/Conformance/PdfUa2Section844LangStrictTest.phpsprawdza rygorystyczny wymóg językowy PDF/UA-2. - Rozwiązanie.
- Zastąp wartość języka prawidłowym znacznikiem BCP 47, takim jak
en-US,de-DElubzh-Hant-TW. - Ustaw język na konkretnym elemencie struktury, gdy język fragmentu różni się od języka dokumentu.
- Uruchom kompilację ponownie.
- Zastąp wartość języka prawidłowym znacznikiem BCP 47, takim jak
- Powiązane. Walidacja PDF/A i PDF/UA.
Przypadki brzegowe i pułapki
Dział zatytułowany „Przypadki brzegowe i pułapki”FontNotFoundExceptioniFontParsingExceptionzgłaszają różne niepowodzenia. Pierwszy przypadek oznacza, że nie udało się uzyskać dostępu do pliku. Parsowanie oznacza, że plik został odczytany, ale jego bajty nie nadają się do użycia. Odczytaj klasę wyjątku, aby ustalić, które niepowodzenie wystąpiło.font-subsetwfont_fileto celowy znacznik etapu tworzenia podzbioru, a nie rzeczywista ścieżka. Nie szukaj pliku o nazwiefont-subset.CjkFontValidatorpróbkuje punkty kodowe, zamiast sprawdzać każdy z nich, więc jego wartość pokrycia jest szacunkiem na potrzeby doboru czcionki, a nie audytem dokładnym co do bajta.- Puste drzewo struktury jest zgodnie z założeniem raportowane jako niezgodne z PDF/UA-2. Jest to udokumentowane zachowanie silnika, a nie defekt.
Zobacz także
Dział zatytułowany „Zobacz także”Słowniczek: tworzenie podzbioru czcionek · pokrycie CJK · drzewo struktury