Sorun giderme: yazı tipleri, alt küme oluşturma ve etiketleme
Kapsam
“Kapsam” başlıklı bölümBu girdiler, NextPDF\Exception\FontNotFoundException ve NextPDF\Exception\FontParsingException tarafından bildirilen yazı tipi çözümleme ve ayrıştırma hatalarını kapsar. Ayrıca Çince, Japonca ve Korece (CJK) kapsamasına yönelik tanılamaları ve etiketli çıktıyı etkileyen yapı ağacı sorunlarını da kapsar. Her girdi, nedeni doğrulayabilmeniz için ilgili istisnayı veya testi açıkça adlandırır.
Girdi: yazı tipi bulunamadı
“Girdi: yazı tipi bulunamadı” başlıklı bölüm- Belirti.
FontNotFoundException; iletisiFont "<name>" not found. Searched: [<paths>]biçimindedir. - Olası neden. İstenen yazı tipi ailesi veya dosya yolu mevcut değildir, okunabilir değildir ya da çalışma zamanının erişemediği bir yazı tipi dizininde bulunur. Yazı tipi verileri geçerli olabilir; yine de motor bunlara ulaşamaz.
- Kanıt / tanılama.
getContext()şunları döndürür:font_name,search_pathsvefallback_attempted. Motorun denediği her konumu incelemek içinsearch_pathsdeğerini kullanın. Bir geri dönüş denemesinin yapılıp yapılmadığını doğrulamak içinfallback_attempteddeğerini kullanın. - Çözüm.
- İstenen
font_namedeğerini, gerçekten mevcut olan yazı tipi dosyasıyla karşılaştırın. - Yazı tipini içeren dizini yapılandırılmış yazı tipi dizinine ekleyin veya ilettiğiniz yolu düzeltin.
- Çalışma zamanı kullanıcısının dosyayı okuyabildiğini doğrulayın.
- Çağrıyı yeniden çalıştırın.
- İstenen
- İlgili. İstisna başvurusu.
Girdi: yazı tipi dosyası ayrıştırılamıyor
“Girdi: yazı tipi dosyası ayrıştırılamıyor” başlıklı bölüm- Belirti.
FontParsingException; iletisiFailed to parse font file "<file>": <reason>biçimindedir. - Olası neden. Motor yazı tipi dosyasını bulmuştur, ancak içeriğini kullanamaz: kesilmiş bir başlık, geçersiz bir tablo dizini ya da
head,hheaveyaOS/2gibi eksik bir zorunlu tablo. - Kanıt / tanılama.
getContext()şunları döndürür:font_fileveparse_error.parse_erroryapısal sorunu adlandırır. - Çözüm.
- Yapısal kusuru belirlemek için
parse_errordeğerini okuyun. - Yazı tipi dosyasını aynı yazı tipinin sağlam olduğu bilinen bir kopyasıyla değiştirin.
- Çağrıyı yeniden çalıştırın.
- Yapısal kusuru belirlemek için
- İlgili. İstisna başvurusu.
Girdi: alt küme oluşturma, hatalı biçimlendirilmiş bir yazı tipi tablosunda başarısız oluyor
“Girdi: alt küme oluşturma, hatalı biçimlendirilmiş bir yazı tipi tablosunda başarısız oluyor” başlıklı bölüm- Belirti.
FontParsingException;font_filedeğerifont-subsetolan veparse_errordeğeriInvalid head table: too short,Invalid hhea table: too short,Invalid maxp table: too shortveyaFailed to unpack font datagibi bir değer içeren bir hatadır. - Olası neden. Yazı tipi ilk yükleme aşamasını geçmiştir, ancak alt küme oluşturma için gereken bir tablo kesilmiştir veya açılamamaktadır. Alt küme oluşturucu, bozuk bir alt küme üretmek yerine yazı tipini reddeder.
- Kanıt / tanılama. Bir
head,hheaveyamaxptablosu çok kısa olduğunda veya bir açma işlemi başarısız olduğunda,src/Typography/FontSubsetter.phpbirFontParsingExceptionbildirir; bu istisna, dosya adı olarak sabitfont-subsetbelirtecini içerir. Bu belirteç, hatanın ilk yükleme sırasında değil, alt küme oluşturma sırasında meydana geldiğini gösterir. - Çözüm.
- Kaynak yazı tipini, aynı yazı tipinin tam ve kesilmemiş bir kopyasıyla değiştirin.
- Yazı tipini bir derleme aracı oluşturuyorsa, onu yeniden oluşturun ve
head,hheavemaxptablolarının tam olduğunu doğrulayın. - Derlemeyi yeniden çalıştırın.
- İlgili. PDF/A ve PDF/UA doğrulaması.
Girdi: CJK metni eksik gliflerle işleniyor
“Girdi: CJK metni eksik gliflerle işleniyor” başlıklı bölüm- Belirti. Çince, Japonca veya Korece metin boş kutular ya da eksik karakterler şeklinde işlenir ve yazı tipinin CJK kapsaması belirsizdir.
- Olası neden. Seçilen yazı tipi, betiğin gerektirdiği Unicode bloklarını kapsamaz. Her CJK betiği, ortak ideogram bloklarına ek olarak belirli bloklar gerektirir.
- Kanıt / tanılama.
src/Typography/CjkFontValidator.php,validateCoverage(FontInfo $font, CjkScript $script)işlevini sağlar. Bu işlev, kapsama yüzdesini ve %50 raporlama eşiğinin altındaki blokları içeren birCjkCoverageResultdöndürür. Doğrulayıcı kod noktalarından örnekleme yapar. Bu, tanılama amaçlıdır ve yazı tipi yüklemesini değiştirmez. - Çözüm.
- Yazı tipi ve hedef betik için
CjkFontValidator::validateCoverage()işlevini çalıştırın. - Hangi blokların kapsanmadığını görmek için
missingRangesdeğerini okuyun; örneğin Geleneksel Çince için Bopomofo, Japonca için Hiragana ve Katakana, Korece için Hangul heceleri. - Bu blokları kapsayan bir yazı tipi seçin veya bunları kapsayan bir geri dönüş yazı tipi ekleyin.
- İşlemeyi yeniden çalıştırın ve kapsamayı yeniden denetleyin.
- Yazı tipi ve hedef betik için
- İlgili. İstisna başvurusu.
Girdi: önceden tanımlı CMap, CJK betiğiyle eşleşmiyor
“Girdi: önceden tanımlı CMap, CJK betiğiyle eşleşmiyor” başlıklı bölüm- Belirti. CJK metni yanlış gliflere eşlenir veya belge, belgenin diliyle eşleşmeyen önceden tanımlı bir CMap kullanır.
- Olası neden. Algılanan betik, Adobe önceden tanımlı CMap adını belirler. Yalnızca ortak ideogram bloğunu kapsayan ancak betiğe özgü bloğu bulunmayan bir yazı tipi, tasarım gereği Basitleştirilmiş Çince olarak algılanır.
- Kanıt / tanılama.
CjkFontValidator::detectScript()algılanan betiği döndürür veresolvePredefinedCMapName()bunu şu şekilde eşler: Basitleştirilmiş Çince içinUniGB-UTF16-H, Geleneksel Çince içinUniCNS-UTF16-H, Japonca içinUniJIS-UTF16-Hve Korece içinUniKS-UTF16-H. Betiğe özgü bir blok bulunmuyorsa, algılama Basitleştirilmiş Çince değerine geri döner. - Çözüm.
- Yazı tipinin betiğe özgü bloğu içerdiğini doğrulayın: Geleneksel Çince için Bopomofo, Japonca için Hiragana veya Katakana, Korece için Hangul.
- Belge Geleneksel Çince ise ancak yazı tipinde Bopomofo bloğu yoksa, algılamanın amaçlanan betik olarak çözümlenmesi için bunu içeren bir yazı tipi seçin.
- İşlemeyi yeniden çalıştırın.
- İlgili. İstisna başvurusu.
Girdi: etiketli içerik kullanılabilir bir yapı ağacı üretmiyor
“Girdi: etiketli içerik kullanılabilir bir yapı ağacı üretmiyor” başlıklı bölüm- Belirti. Etiketli bir derleme hiçbir yapı üretmez veya sonraki bir erişilebilirlik denetimi boş ya da eksik bir yapı ağacı bildirir.
- Olası neden. Derleme, içeriği etiketleme yolunun dışında ürettiği için hiçbir yapı öğesi oluşturmaz. Yapı ağacı boş kalır.
- Kanıt / tanılama.
src/Accessibility/StructureTree.phpvesrc/Accessibility/TaggedContentEmitter.php, yapı ağacını etiketli içerikten oluşturur.tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.phptesti, boş bir yapı ağacının PDF/UA-2 olarak bildirilmediğini doğrular. - Çözüm.
- Yapı öğelerinin oluşturulabilmesi için içeriğin etiketleme yolu üzerinden üretildiğini doğrulayın.
- Her işaretli içerik dizisinin bir yapı öğesine eşlendiğini doğrulayın.
- Derlemeyi yeniden çalıştırın ve yapı ağacını inceleyin.
- İlgili. PDF/A ve PDF/UA doğrulaması.
Girdi: yapı öğesi dil etiketi reddediliyor
“Girdi: yapı öğesi dil etiketi reddediliyor” başlıklı bölüm- Belirti. Bir yapı öğesindeki ya da belgedeki dil değeri geçerli bir etiket olmadığı için derleme başarısız olur.
- Olası neden. Sağlanan dil, geçerli bir BCP-47 etiketi değildir. Doğrulayıcı, hatalı biçimlendirilmiş etiketleri üretmek yerine reddeder.
- Kanıt / tanılama.
src/Accessibility/Bcp47Validator.phpetiketi doğrular. Geçersiz bir etiketsrc/Accessibility/InvalidBcp47TagException.phpbildirir.tests/Unit/Conformance/PdfUa2Section844LangStrictTest.php, katı PDF/UA-2 dil gereksinimini sınar. - Çözüm.
- Dil değerini
en-US,de-DEveyazh-Hant-TWgibi geçerli bir BCP-47 etiketiyle değiştirin. - Bir bölüm belge dilinden farklı olduğunda, dili ilgili yapı öğesi üzerinde ayarlayın.
- Derlemeyi yeniden çalıştırın.
- Dil değerini
- İlgili. PDF/A ve PDF/UA doğrulaması.
Sınır durumları ve dikkat edilecek noktalar
“Sınır durumları ve dikkat edilecek noktalar” başlıklı bölümFontNotFoundExceptionveFontParsingExceptionfarklı hataları bildirir. Bulunamadı hatası, dosyaya ulaşılamadığı anlamına gelir. Ayrıştırma hatası, dosyaya ulaşıldığı ancak baytlarının kullanılamadığı anlamına gelir. Hangi hatanın oluştuğunu belirlemek için sınıfı okuyun.font-subsetdeğeri,font_fileiçinde gerçek bir yol değil, alt küme oluşturma aşaması için bilinçli olarak yerleştirilmiş bir işarettir.font-subsetadlı bir dosya aramayın.CjkFontValidator, her kod noktasını denetlemek yerine kod noktalarından örnekleme yapar; bu nedenle kapsama değeri, bayt düzeyinde tam bir denetim değil, yazı tipi seçimine yönelik bir tahmindir.- Boş bir yapı ağacı, tasarım gereği PDF/UA-2 olmayan çıktı olarak bildirilir. Bu bir kusur değil, belgelenmiş motor davranışıdır.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölümSözlük: yazı tipi alt küme oluşturma · CJK kapsaması · yapı ağacı