İçeriğe geç
getnextpdf.com

Pro sürüm

Filtre

NextPDF\Pro\Filter, iki odaklı yardımcı sağlar: PDF /DecodeParms sözlüğü için bir ayrıştırıcı ve FlateDecode edilmiş akışlara uygulanan PNG kestiricisi için bir ters filtre. Pro Diff ve Classifier çıkarıcılarının kullandığı kestirici desteğidir; genel amaçlı bir filtre çerçevesi değildir.

Bu yetenek NextPDF Pro (nextpdf/pro) içinde sunulur ve bir Pro katmanı lisans zarfıyla etkinleşir. Bu yetkiye 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.

Filter sınıfları, nextpdf/pro yüklü olduğunda her zaman kullanılabilir; hiçbir çalışma zamanı yetenek bayrağı bu modülü kapılamaz.

Terminal window
composer require nextpdf/pro:^3

PDF akışları FlateDecode ile sıkıştırılmış olabilir ve sıkıştırmayı iyileştirmek için ek olarak bir kestiriciyle ön işlenebilir. ISO 32000-2:2020 §7.4.4.4, kestirici parametrelerini (/Predictor, /Columns, /Colors, /BitsPerComponent) ve PNG kestirici ailesini (etiketler 10–15) tanımlar.

  • DecodeParms, bir /DecodeParms sözlük parçasını makul varsayılanlarla (kestirici 1, sütun 1, renk 1, bileşen başına bit 8) değişmez bir değer nesnesine ayrıştırır. isPngPredictor(), 10–15 etiketleri için doğrudur.
  • PngPredictor, beş PNG filtre türünün — None, Sub, Up, Average, Paeth — ve Optimum’un (kestirici 15, satır başına etiket) tersini uygular. Parametreleri doğrular ve aralık dışı değerlerde veya kesik bir satırda InvalidArgumentException oluşturur.

Bu modül, bir akışı okurken mevcut bir kestiriciyi tersine çevirir. PDF akış filtrelerinin tam kümesini uygulamaz ve filtre ayarlama kancaları sağlamaz.

Modül, genel amaçlı bir filtre çerçevesi sunmak yerine mevcut bir kestiriciyi tersine çevirir. Pro Diff ve Classifier çıkarıcıları yalnızca bir üreticinin önceden yazdığını okur, bu yüzden dar bir kapsam yeterlidir. Bu kapsam, herhangi bir bayt işlenmeden önce her girdinin sınırlandırılmasına olanak tanır. DecodeParms::fromDictionary(), ayrıştırma zamanındaki daraltma noktasıdır: negatif veya aşırı büyük geometriyi reddeder ve bir anahtarın bulunmadığı yerde DecodeParms::__construct() varsayılanlarını uygular. PngPredictor, bu sınırları uygulama zamanında yeniden denetler, böylece düşmanca bir /DecodeParms büyük bir tahsis yerine türlü bir hata oluşturur. Çağıranlar DecodeParms::isPngPredictor() üzerinde dallanır ve TIFF kestiricisini yalnızca 10–15 etiketlerini işleyen bir ters filtreden uzak tutar.

Tasarım arka planı: Akışlar ve filtreler.

  • DecodeParms::fromDictionary(string $raw): self — boşluğa toleranslı tamsayı eşleştirmesi; eksik anahtarlar varsayılanlarını korur.
  • PngPredictor::inverse(string $raw, int $columns, int $colors, int $bitsPerComponent, int $predictor): string — kestirici 10–15 olmalıdır; sütunlar ve renkler ≥ 1 olmalıdır; bileşen başına bit 1, 2, 4, 8 veya 16 olmalıdır; hesaplanan adımdan kısa bir satır InvalidArgumentException oluşturur.
  • Belirlenimcilik. Çıktı, girdilerin saf bir fonksiyonudur.
TürÇeşitTemel üyeler
NextPDF\Pro\Filter\DecodeParmsfinal readonly class__construct(int $predictor = 1, int $columns = 1, int $colors = 1, int $bitsPerComponent = 8), static fromDictionary(string $raw): self, isPngPredictor(): bool
NextPDF\Pro\Filter\PngPredictorfinal classstatic inverse(string $raw, int $columns, int $colors, int $bitsPerComponent, int $predictor): string
<?php
declare(strict_types=1);
use NextPDF\Pro\Filter\DecodeParms;
use NextPDF\Pro\Filter\PngPredictor;
$parms = DecodeParms::fromDictionary('<< /Predictor 15 /Columns 640 /Colors 3 >>');
if ($parms->isPngPredictor()) {
$raw = PngPredictor::inverse(
$flateDecodedBytes,
$parms->columns,
$parms->colors,
$parms->bitsPerComponent,
$parms->predictor,
);
}
<?php
declare(strict_types=1);
use InvalidArgumentException;
use NextPDF\Pro\Filter\DecodeParms;
use NextPDF\Pro\Filter\PngPredictor;
function undoPredictor(string $decoded, string $dictFragment): string
{
$parms = DecodeParms::fromDictionary($dictFragment);
if (! $parms->isPngPredictor()) {
return $decoded; // no predictor, or TIFF predictor — return as-is
}
try {
return PngPredictor::inverse(
$decoded,
$parms->columns,
$parms->colors,
$parms->bitsPerComponent,
$parms->predictor,
);
} catch (InvalidArgumentException) {
return $decoded; // malformed predictor metadata — fail safe
}
}
  • TIFF kestiricisi (etiket 2), DecodeParms tarafından tanınır ancak PngPredictor tarafından ters filtrelenmez (yalnızca 10–15 kabul eder). Çağıranlar isPngPredictor() üzerinde dallanmalıdır.
  • Hesaplanan adımdan kısa bir kestirici satırı reddedilir; sessizce kesilmez.
  • Satır adımı, columns * colors * bitsPerComponent değerinden hesaplanır; uyumsuz /DecodeParms ile gerçek akış düzeni, bozuk çıktı yerine bir parametre veya kesilme hatası üretir.

PngPredictor::inverse(), küçük bir bayt başına sabitle akış uzunluğunda doğrusaldır. DecodeParms ayrıştırması, birkaç sınırlı düzenli ifade eşleştirmesidir. Bkz. performance_budget.

Parametre aralıkları, herhangi bir bayt işlemeden önce doğrulanır ve kesik bir satır, sınır dışına okumak yerine hata oluşturur. Güvenilmeyen akışlarda kestiricileri tersine çeviren çağıranlar, Pro Diff ve Classifier çıkarıcılarının yaptığı gibi açılmış boyutu da yukarı akışta sınırlamalıdır.

İddiaStandart maddesiDurum
/DecodeParms parametreleri ve varsayılanlarıISO 32000-2:2020 §7.4.4.4Doğrulandı (birim paketi)
PNG kestirici ters filtresi, etiketler 10–15ISO 32000-2:2020 §7.4.4.4Doğrulandı (birim paketi)
Tam PDF akış filtresi çerçevesiDesteklenmiyor (kapsam dışı)

PNG kestirici tersine çevirme için hiçbir Core eşdeğeri sunulmaz. Core’un kendi akış işleme mekanizması motora içkindir ve bu genel yüzeyin parçası değildir.

Bu, dar kapsamlı bir kestirici yardımcısıdır. Bir kriptografik filtre, bir içerik temizleyici veya bir veri yeniden yapılandırma/etkisizleştirme bileşeni değildir; bu konular kapsam dışıdır.

Bu sayfa yalnızca dışarıdan gözlemlenebilen davranışı ve desteklenen genel API yüzeyini belgeler. İç ad alanı yolları, yardımcı sınıflar, mekanizma tabloları, çalıştırma kılavuzu dosya adları ve talep önekleri kapsam dışıdır.