Pro sürüm
Font Tools — Derinlemesine başvuru
Bir bakışta
“Bir bakışta” başlıklı bölümBu sayfa, NextPDF Pro Font Tools için sözleşme düzeyinde başvurudur. Yüzey; tek bir tarayıcı olan NextPDF\Pro\FontTools\FontDesubsetter ile iki değişmez değer nesnesi olan SubsetInfo ve DesubsetPlan’dir. Tarayıcı, ham PDF baytlarını okur, her ayrı /BaseFont girişini bildirir ve ISO 32000-2:2020 §9.9.2’nin alt küme adlandırma kuralına uyan girişleri işaretler. Bir plan, işaretlenen alt kümeleri toplar ve tam yazı tipi programlarının geri yüklenmesinin bayt maliyetini tahmin eder. Modül yalnızca analiz eder ve tahminde bulunur; gömülü bir yazı tipi programını asla yeniden yazmaz. Bu sayfa, genel API’yi, gözlemlenebilir davranış sözleşmesini ve hata modlarını belirtir.
Kullanılabilirlik ve lisanslama
“Kullanılabilirlik ve lisanslama” başlıklı bölümBu yetenek NextPDF Pro (nextpdf/pro) ile gelir ve Pro katmanı lisans zarfıyla etkinleşir. Bu yetkilendirmeye sahip olmayan bir dağıtım, yeteneğin sınıflarını yüklemez. Sürümleri karşılaştırın ve bir lisans edinin.
Bu modülü hiçbir özellik başına lisans bayrağı kapılamaz. Font Tools sınıfları, nextpdf/pro yüklü olduğu her durumda kullanılabilir.
Genel API yüzeyi
“Genel API yüzeyi” başlıklı bölüm| Sembol | Parametreler | Varsayılan davranış | Döndürür | Fırlatır veya şununla başarısız olur | Notlar |
|---|---|---|---|---|---|
FontDesubsetter | yok | Ham PDF baytları üzerinde durumsuz tarayıcı | — | — | final; belgeler arasında yeniden kullanımı güvenli |
FontDesubsetter::analyzeSubsets() | string $pdfData | Her ayrı /BaseFont girişini —alt küme olsun olmasın— isSubset ile işaretleyerek bildirir | list<SubsetInfo> | Genişlikten türetilen bir alt küme tahmini, addan türetilen tam sayı tahminini aştığında InvalidArgumentException | Bayt düzeyinde tarama; sıkıştırılmış nesne akışları çözülmez |
FontDesubsetter::isSubsetFont() | string $baseFontName | Altı büyük harf artı + önek kuralıyla eşleşir | bool | — | Adın başına sabitlenir |
FontDesubsetter::extractSubsetPrefix() | string $baseFontName | Altı harflik alt küme etiketini döndürür | string | — | Alt küme olmayan adlar için boş dize |
FontDesubsetter::generateDesubsetPlan() | list<SubsetInfo> $subsets | isSubset değeri true olan girişleri toplar ve boyut tahminini toplar | DesubsetPlan | Fırlatmaz | Alt küme olmayan girişler sessizce atlanır |
SubsetInfo | yapıcı: $fontName, $baseFont, $subsetGlyphCount, $fullGlyphCount, $isSubset, $encoding | Bir /BaseFont girişinin değişmez tanımı | — | Negatif bir glif sayısında veya tam sayının üstünde bir alt küme sayısında InvalidArgumentException | final readonly; tüm özellikler genel |
SubsetInfo::subsetPrefix() | yok | fontName içinden altı harflik etiketi çıkarır | string | — | Alt küme olmadığında veya + altıncı konumdan uzakta durduğunda boş dize |
SubsetInfo::coveragePercent() | yok | Tam glif kümesindeki alt küme payı | [0.0, 100.0] aralığında float | — | fullGlyphCount 0 olduğunda 0.0 döndürür |
DesubsetPlan | yapıcı: list<SubsetInfo> $targets, int $estimatedSizeIncrease | Değişmez alt küme geri alma planı | — | — | final readonly; tüm özellikler genel |
DesubsetPlan::count() | yok | Hedeflenen yazı tiplerinin sayısı | int | — | targets uzunluğuna eşittir |
DesubsetPlan::totalGlyphsNeeded() | yok | Tüm hedefler boyunca toplanan eksik glifler | int | — | Hedef başına fullGlyphCount - subsetGlyphCount toplamı |
Giriş noktası imzaları
“Giriş noktası imzaları” başlıklı bölümpublic function analyzeSubsets(string $pdfData): array
public function isSubsetFont(string $baseFontName): bool
public function extractSubsetPrefix(string $baseFontName): string
public function generateDesubsetPlan(array $subsets): DesubsetPlanpublic function __construct( public string $fontName, public string $baseFont, public int $subsetGlyphCount, public int $fullGlyphCount, public bool $isSubset, public string $encoding,)
public function subsetPrefix(): string
public function coveragePercent(): floatpublic function __construct( public array $targets, public int $estimatedSizeIncrease,) {}
public function count(): int
public function totalGlyphsNeeded(): intDavranış sözleşmesi
“Davranış sözleşmesi” başlıklı bölümTarama ve alt küme algılama
“Tarama ve alt küme algılama” başlıklı bölümanalyzeSubsets(), /BaseFont ad belirteçlerini bayt düzeyinde bir desen eşleştirmesiyle ham baytlardan çıkarır. Yinelenen adlar tek bir girişte birleşir; sıralama ilk görünüşü izler. Her ayrı ad, alt küme olsun olmasın bir SubsetInfo üretir. Bir ad, tam olarak altı büyük ASCII harfiyle başlayıp + ile devam ettiğinde —§9.9.2 kuralı— bir alt kümedir. Alt küme adları için baseFont, yedi karakterlik önek çıkarılmış addır. Sıradan adlar için baseFont, fontName ile eşittir. Her ayrı alt küme adı, alt kümeleri bağımsız varlıklar olarak ele alma yönündeki §9.9.2 tavsiyesine uygun olarak kendi girişi olarak bildirilir.
Kodlama algılama
“Kodlama algılama” başlıklı bölümHer yazı tipi için tarayıcı, /BaseFont görünümünden sonra sınırlı bir bayt penceresini arar. Penceredeki bir /Encoding ad girişi kazanır. Bu başarısız olursa, penceredeki bir Identity-H veya Identity-V alt dizesi bildirilir. Her ikisi de başarısız olursa, giriş Unknown bildirir. Sözlüklerde tutulan veya dolaylı başvurularla erişilen kodlama değerleri Unknown bildirir.
Glif muhasebesi
“Glif muhasebesi” başlıklı bölümHer iki glif sayısı da tahmindir. subsetGlyphCount, yazı tipi girişinin yakınında görünen genişlik dizilerinden türetilir: bir CIDFont /W dizisi genişlik üçlüsü başına kabaca bir glif verir ve basit bir yazı tipinin /Widths dizisi sayısal giriş başına bir glif verir. Pencerede hiçbir dizi görünmediğinde, küçük bir sabit varsayılan uygulanır. /BaseFont görünümü, pencere araması için yeniden konumlandırılamadığında sayı 0 olur. fullGlyphCount, aile adı buluşsal yöntemlerinden türetilir: iyi bilinen Latin ailelerinin bir tablosu, bir CJK aile adı göstergeleri kümesi ve aksi hâlde genel bir taban. Gömülü yazı tipi programı asla ayrıştırılmaz. Belirli tablolar, pencere boyutları ve sabitler uygulama ayrıntısıdır, yayımlanmaz ve sürümler arasında değişebilir.
Plan oluşturma
“Plan oluşturma” başlıklı bölümgenerateDesubsetPlan(), girdiyi isSubset değeri true olan girişlere göre filtreler. Her hedef, eksik glif sayısını sabit bir glif başına ortalama bayt sabitiyle çarparak estimatedSizeIncrease’e katkıda bulunur. Plan, kapasite kararları için bir projeksiyondur, ölçülmüş bir fark değildir. Bir planı yürütmek —yazı tipi programlarını yeniden yazmak— bu modülün dışındadır.
Belirlenimcilik
“Belirlenimcilik” başlıklı bölümYüzeyin tamamı, girdisinin saf bir işlevidir. Aynı baytlar aynı sonuçları üretir. Rastgelelik, ağ çağrısı ve dosya sistemi erişimi yoktur.
Uç durumlar ve hata modları
“Uç durumlar ve hata modları” başlıklı bölümSubsetInfoyapımı geçersiz durumları reddeder: negatif bir glif sayısı veya tam sayının üstünde bir alt küme sayısı,InvalidArgumentExceptionfırlatır.analyzeSubsets(), bu istisnayı tek bir köşe durumunda yayabilir: adı bilinen bir aileyle eşleşen ancak görünen genişlik dizisi, ailenin tam sayı rakamından daha büyük bir alt küme tahmini veren bir yazı tipi.- Algılama, bayt gösterimi üzerinde çalışır. Sıkıştırılmış nesne akışları içinde seri hâle getirilmiş
/BaseFontgirişleri görünmezdir; taramadan önce bu akışları açın. /BaseFontanahtarı ve değeri tek bir boşluktan başka bir boşlukla ayrılan girişler yine de algılanır, ancak yazı tipi başına pencere araması onları yeniden konumlandıramaz. Bu tür girişlerUnknownkodlamasını ve0alt küme glif sayısını bildirir.#ile kaçış karakterli baytlar kullanan PDF adları ham kaçışlı biçimde bildirilir; kaçışlar çözülmez.- Yinelenen
/BaseFontadları tek bir girişte birleşir. Tek bir adı paylaşan iki ayrı yazı tipi nesnesi bu tarayıcı için ayırt edilemez. generateDesubsetPlan(), alt küme olmayan girdide asla başarısız olmaz;isSubsetdeğerifalseolan girişler yalnızcatargetsdışında bırakılır.- Tüm sayılar ve
estimatedSizeIncreasebirer buluşsal yöntemdir. Bunları ölçülmüş değerler olarak ele almayın; yalnızca triyaj ve kapasite planlaması için kullanın. - Bu modülde hiçbir kriptografik işlem gerçekleşmez, bu nedenle FIPS moduna özgü bir davranış yoktur.
Uygunluk
“Uygunluk” başlıklı bölüm| İddia | Standart | Madde |
|---|---|---|
Alt küme algılama, alt küme adlandırma kuralıyla eşleşir: BaseFont değerine öneklenen, altı büyük harf artı + etiketiyle. | ISO 32000-2:2020 | §9.9.2 |
| Her ayrı alt küme adı, birden çok alt kümenin ayrı varlıklar olarak ele alınması önerisine uyarak bağımsız olarak bildirilir. | ISO 32000-2:2020 | §9.9.2 |
Tüm maddeler yorumlanmıştır; NextPDF normatif metni yeniden üretmez. Bunlar yetenek beyanlarıdır, sertifikalar değil. NextPDF hiçbir sertifika taşımaz ve hiçbir sertifika vermez. Modül, adlandırma kuralının algılandığını ve belirlenimci bildirimi öne sürer; glif sayısı veya boyut tahminlerinin doğruluğunu öne sürmez.
Geliştirme notları
“Geliştirme notları” başlıklı bölümcomposer require nextpdf/pro:^3ile yükleyin.nextpdf/pro1.9.0’dan beri kullanılabilir;nextpdf/pro3.1.0’da günceldir.FontDesubsetterdurumsuzdur. Bir kez oluşturun ve belgeler ile iş akışları arasında yeniden kullanın.- Alt küme kapsamı önemli olduğunda
analyzeSubsets()’e açılmış baytlar besleyin; nesne akışına paketlenmiş yazı tipi sözlükleri aksi hâlde kaçırılır. - Harekete geçmeden önce
SubsetInfo::isSubsetüzerinde dallanın; sonuç listesi, envanter amacıyla kasıtlı olarak alt küme olmayan yazı tiplerini de içerir. - Tam yazı tipi programları temin etmeden önce alt küme geri almanın dosya boyutu maliyetine değip değmeyeceğine karar vermek için
DesubsetPlan::totalGlyphsNeeded()veestimatedSizeIncreasedeğerlerini kullanın. - Tarama, sınırlı yazı tipi başına pencere aramalarıyla girdi uzunluğunda doğrusaldır. Modül hiçbir şey saklamaz ve hiçbir telemetri yaymaz.
Yayımlama sınırı
“Yayımlama sınırı” başlıklı bölümBu sayfa yalnızca dışarıdan gözlemlenebilir davranışı ve desteklenen genel API yüzeyini belgeler. Dahili ad alanı yolları, yardımcı sınıflar, mekanizma tabloları, çalıştırma kılavuzu dosya adları ve bilet önekleri kapsam dışındadır.
Ayrıca bkz.
“Ayrıca bkz.” başlıklı bölüm- Font Tools (yetenek) — kurulum, hızlı başlangıç ve planlama iş akışı örnekleri.
- Optimizer — Derinlemesine başvuru — yazı tipiyle ilgili optimizasyon dahil, kardeş boyut küçültme yüzeyi.
- Core yazı tipi modülü — NextPDF Core’da belge oluşturma sırasında yazı tipi gömme ve alt kümeleme.