İçeriğe geç
getnextpdf.com

Pro sürüm

Font Tools — Derinlemesine başvuru

Bu 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.

Bu 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.

SembolParametrelerVarsayılan davranışDöndürürFırlatır veya şununla başarısız olurNotlar
FontDesubsetteryokHam PDF baytları üzerinde durumsuz tarayıcıfinal; belgeler arasında yeniden kullanımı güvenli
FontDesubsetter::analyzeSubsets()string $pdfDataHer ayrı /BaseFont girişini —alt küme olsun olmasın— isSubset ile işaretleyerek bildirirlist<SubsetInfo>Genişlikten türetilen bir alt küme tahmini, addan türetilen tam sayı tahminini aştığında InvalidArgumentExceptionBayt düzeyinde tarama; sıkıştırılmış nesne akışları çözülmez
FontDesubsetter::isSubsetFont()string $baseFontNameAltı büyük harf artı + önek kuralıyla eşleşirboolAdın başına sabitlenir
FontDesubsetter::extractSubsetPrefix()string $baseFontNameAltı harflik alt küme etiketini döndürürstringAlt küme olmayan adlar için boş dize
FontDesubsetter::generateDesubsetPlan()list<SubsetInfo> $subsetsisSubset değeri true olan girişleri toplar ve boyut tahminini toplarDesubsetPlanFırlatmazAlt küme olmayan girişler sessizce atlanır
SubsetInfoyapıcı: $fontName, $baseFont, $subsetGlyphCount, $fullGlyphCount, $isSubset, $encodingBir /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 InvalidArgumentExceptionfinal readonly; tüm özellikler genel
SubsetInfo::subsetPrefix()yokfontName içinden altı harflik etiketi çıkarırstringAlt küme olmadığında veya + altıncı konumdan uzakta durduğunda boş dize
SubsetInfo::coveragePercent()yokTam glif kümesindeki alt küme payı[0.0, 100.0] aralığında floatfullGlyphCount 0 olduğunda 0.0 döndürür
DesubsetPlanyapıcı: list<SubsetInfo> $targets, int $estimatedSizeIncreaseDeğişmez alt küme geri alma planıfinal readonly; tüm özellikler genel
DesubsetPlan::count()yokHedeflenen yazı tiplerinin sayısıinttargets uzunluğuna eşittir
DesubsetPlan::totalGlyphsNeeded()yokTüm hedefler boyunca toplanan eksik gliflerintHedef başına fullGlyphCount - subsetGlyphCount toplamı
public function analyzeSubsets(string $pdfData): array
public function isSubsetFont(string $baseFontName): bool
public function extractSubsetPrefix(string $baseFontName): string
public function generateDesubsetPlan(array $subsets): DesubsetPlan
public 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(): float
public function __construct(
public array $targets,
public int $estimatedSizeIncrease,
) {}
public function count(): int
public function totalGlyphsNeeded(): int

analyzeSubsets(), /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.

Her 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.

Her 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.

generateDesubsetPlan(), 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.

Yüzeyin tamamı, girdisinin saf bir işlevidir. Aynı baytlar aynı sonuçları üretir. Rastgelelik, ağ çağrısı ve dosya sistemi erişimi yoktur.

  • SubsetInfo yapımı geçersiz durumları reddeder: negatif bir glif sayısı veya tam sayının üstünde bir alt küme sayısı, InvalidArgumentException fı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ş /BaseFont girişleri görünmezdir; taramadan önce bu akışları açın.
  • /BaseFont anahtarı 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şler Unknown kodlamasını ve 0 alt 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 /BaseFont adları 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; isSubset değeri false olan girişler yalnızca targets dışında bırakılır.
  • Tüm sayılar ve estimatedSizeIncrease birer 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.
İddiaStandartMadde
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.

  • composer require nextpdf/pro:^3 ile yükleyin. nextpdf/pro 1.9.0’dan beri kullanılabilir; nextpdf/pro 3.1.0’da günceldir.
  • FontDesubsetter durumsuzdur. 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() ve estimatedSizeIncrease değ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.

Bu 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.