İçeriğe geç
getnextpdf.com

Pro sürüm

AST — Derinlemesine başvuru

Bu sayfa, Pro AST modülünün derinlemesine başvurusudur. Genel build, cache, mutation, write ve emit yüzeylerini, bunların davranış sözleşmelerini ve arıza modlarını kapsar. Modül, yüklenmiş bir PDF’i değişmez bir AstDocument ağacına ayrıştırır, günlüğe kaydedilen bellek içi değişiklikleri uygular ve overlay tabanlı artımlı güncellemeler yazar. AstDocument ve AstNode, NextPDF\Ast ad alanındaki Core değer türleridir; bu modül onları üretir ve tüketir.

Bu yetenek NextPDF Pro (nextpdf/pro) ile birlikte gelir ve 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 lisans edinin.

Özellik başına lisans bayrağı yoktur. Bu, bir Pro sürümü yeteneğidir. Derleme davranışı tamamen AstBuildOptions tarafından yönetilir.

SembolParametrelerVarsayılan davranışDöndürürFırlatır veya şununla başarısız olurNotlar
AstBuilder::__constructPdfReader $reader, AstBuildOptions $options, ?AstCache $cache = nullYüklenmiş bir okuyucuyu derleme seçeneklerine bağlar; önbellekleme isteğe bağlıdırAstBuilderNull önbellek, her build() çağrısının yeniden oluşturduğu anlamına gelir.
AstBuilder::buildstring $sourceHash (PDF baytlarının tam SHA-256 onaltılık değeri)Önbellek araması, şifreleme reddi, yapı ağacı yolu, etiketsiz geri dönüş, sınırlayıcı kutu eklenmesi, önbellek depolamasıAstDocumentAstUnsupportedEncryptionException, AstBuildLimitException, AstBuildTimeoutExceptionBir önbellek isabeti, yeniden ayrıştırma olmadan döndürür.
AstBuildOptions::__construct?int $pageRangeStart = null, ?int $pageRangeEnd = null, int $maxNodes = 100_000, int $maxDepth = 200, ?int $estimatedTokenBudget = null, int $maxMemoryBytes = 268435456, float $timeoutSeconds = 30.0, bool $useHeuristic = falseDeğişmez yapılandırma değer nesnesiAstBuildOptionsestimatedTokenBudget bilgilendirici bir ipucudur; zorunlu tutulmaz.
AstBuildOptions::pageRangeContainsint $pageIndex0 tabanlı dizin, yapılandırılan aralığın içine düştüğünde doğruboolNull sınırlar açık uçludur; her ikisi de null ise tüm sayfalar anlamına gelir.
AstBuildOptions::hashTüm seçenek değerleri üzerinde kararlı SHA-256stringEşit değerler, örnekler arasında eşit karmalar üretir; önbellek anahtarı bölümü olarak kullanılır.
AstCache::__constructCacheInterface $backendHerhangi bir PSR-16 arka ucunu sararAstCache
AstCache::buildKeystring $sourceHash, AstBuildOptions $optionsAnahtar = nextpdf_ast_v1_ + kaynak karmasının ilk 32 onaltılığı + _ + seçenekler karmasının ilk 16 onaltılığıstringSeçenek değişiklikleri, önbelleğe alınmış sonuçları otomatik olarak geçersiz kılar.
AstCache::getstring $cacheKeyBir JSON yükünü katı alan başına doğrulamayla çözer?AstDocumentAsla fırlatmaz; başarısızlıklar null döndürürHatalı biçimlendirilmiş veya kurcalanmış yükler, önbellek ıskası olarak kapalı biçimde başarısız olur.
AstCache::setstring $cacheKey, AstDocument $documentJSON’u 24 saatlik bir TTL ile depolar, ardından anında geri okumayla doğrularvoidAstWriteVerificationException (Exception ad alanı)Arka uç yazma başarısızlığı veya başarısız bir gidiş-dönüş, hata fırlatır.
AstCache::deletestring $cacheKeyEn iyi çaba temelli kaldırmavoidAsla fırlatmazArka uç silme başarısızlıkları yutulur.
AstCache::hasstring $cacheKeyEn iyi çaba temelli varlık denetimiboolAsla fırlatmaz; başarısızlıklar false döndürür
AstMutator::updateNodeAstDocument $document, string $nodeId, array $updatestext_content değerini değiştirir, bir Updated girişi kaydederAstDocument (yeni örnek)InvalidArgumentExceptionYalnızca text_content anahtarı uygulanır; bilinmeyen anahtarlar yok sayılır.
AstMutator::deleteNodeAstDocument $document, string $nodeIdDüğümü bellek içi ağaçtan kaldırır, bir Deleted girişi kaydederAstDocument (yeni örnek)InvalidArgumentExceptionYalnızca bellek içi kaldırma; aşağıdaki redaksiyon uyarısına bakın.
AstMutator::getMutationLogPaylaşılan günlük örneğini döndürürMutationLogAynı günlüğü AstWriter’a geçirin.
AstMutator::resetLogKaydedilen tüm değişiklikleri atarvoidYeni bir günlük başlatır.
MutationLogrecord, all, isEmpty, count, forNode, mutatedNodeIdsYalnızca ekleme yapılan bellek içi günlük, ekleme sırası korunuryönteme göreforNode, bir düğüm için en son girişi döndürür; son giriş kazanır.
MutationEntry::__constructstring $nodeId, MutationType $type, ?AstNode $originalNode, ?AstNode $mutatedNode, DateTimeImmutable $timestampBir değişikliğin değişmez kaydıMutationEntryoriginalNode, Inserted için null’dur; mutatedNode, Deleted için null’dur.
MutationTypeenum durumları Updated, Inserted, DeletedString destekli sınıflandırmaOVERLAY altında Deleted, içeriği gizler; baytları silmez.
AstWriter::writestring $originalPdfBytes, MutationLog $logOverlay akışları değiştirilen sınırlayıcı kutuları kapsayan bir artımlı güncelleme eklerstring (değiştirilmiş PDF baytları)AstWriteExceptionBoş bir günlük, girdiyi değiştirmeden döndürür. Inserted girişleri ve sınırlayıcı kutusu olmayan girişler atlanır.
AstWriter::writeAndVerifystring $originalPdfBytes, MutationLog $logwrite() çalıştırır, ardından yapısal bir çıktı denetimi yaparstring (doğrulanmış PDF baytları)AstWriteException, AstWriteVerificationException (Writer ad alanı)Doğrulama semantik değil, yapısaldır.
AstPdfEmitter::emitAstNode $root, BinaryBuffer $buffer, ObjectRegistry $registry, array $pageObjectsSağlanan ağaç için bir StructTreeRoot, StructElem zinciri ve ParentTree yazarEmitResultAstEmitExceptionKök, alt öğeleri olan bir Document düğümü olmalıdır. Yapı ağacı doğrulaması için gidiş-dönüş yayıcısı.
EmitResult::__constructint $structTreeRootObject, int $rootElementObject, int $parentTreeObject, int $elementObjectCount, int $parentTreeNextKeyYayılan nesne tanımlayıcılarının değişmez kaydıEmitResult
public function build(string $sourceHash): AstDocument
public function updateNode(AstDocument $document, string $nodeId, array $updates): AstDocument
public function deleteNode(AstDocument $document, string $nodeId): AstDocument
public function write(string $originalPdfBytes, MutationLog $log): string
public function writeAndVerify(string $originalPdfBytes, MutationLog $log): string
  • NextPDF\Pro\Ast\Exception\AstException, RuntimeException’ı genişletir — derleme hiyerarşisinin temeli.
  • AstBuildLimitException, AstException’ı genişletir — bir düğüm, derinlik veya bellek tavanı aşıldı.
  • AstBuildTimeoutException, AstBuildLimitException’ı genişletir — gerçek zamanlı derleme zaman aşımı doldu.
  • AstNoStructTreeException, AstException’ı genişletir — hiçbir yapı ağacı yok. AstBuilder::build() bunu dahili olarak yakalar ve geri döner; build() çağıranlar bunu gözlemlemez.
  • AstUnsupportedEncryptionException, AstException’ı genişletir — girdi PDF’i şifrelenmiştir.
  • NextPDF\Pro\Ast\Exception\AstWriteVerificationException, AstException’ı genişletir — önbellek yazma doğrulaması başarısız oldu.
  • NextPDF\Pro\Ast\Writer\AstWriteException, RuntimeException’ı genişletir — yazıcı girdi veya yapı başarısızlığı.
  • NextPDF\Pro\Ast\Writer\AstWriteVerificationException, AstWriteException’ı genişletir — yazma sonrası yapısal doğrulama başarısız oldu.

Farklı ad alanlarında iki ayrı AstWriteVerificationException sınıfı bulunur. AstCache::set(), Exception ad alanı sınıfını fırlatır; AstWriter::writeAndVerify(), Writer ad alanı sınıfını fırlatır. catch cümlelerinde ad alanını eşleştirin.

AstBuilder::build($sourceHash), kaynak baytlarının tam SHA-256 onaltılık değerini gerektirir. İşlem hattı şudur: isteğe bağlı önbellek araması, şifreleme reddi, yapı ağacı yolu, etiketsiz geri dönüş, sınırlayıcı kutu eklenmesi, isteğe bağlı önbellek depolaması.

Önbellek anahtarı, kaynak karmasını AstBuildOptions karmasıyla birleştirir. Seçenekler karması, özdeş değerlere sahip örnekler arasında kararlıdır; bu nedenle özdeş girdiler ve seçenekler aynı ağacı döndürür. Hiçbir önbellek sağlanmadığında, her çağrı yeniden oluşturur. Önbelleğe alınmış yükler JSON’dur, asla yerel PHP serileştirmesi değildir: okuma yolu her alanı doğrular ve yalnızca AST değer türlerini örnekler, bu nedenle zehirlenmiş bir önbellek girişi nesne enjeksiyonu tetikleyemez ve önbellek ıskasına indirgenir.

Yapı ağacı yolu, bir yapı ağacı mevcut olduğunda çalışır. Kaynak tavanları — düğüm sayısı, derinlik, bellek deltası ve gerçek zaman — yapı ağacı okuması sırasında zorunlu tutulur ve AstBuildLimitException veya AstBuildTimeoutException fırlatır. Okuyucu hiçbir yapı ağacı raporlamazsa, oluşturucu etiketsiz yola geçer: useHeuristic doğru olduğunda sezgisel oluşturucu, aksi takdirde yalın geri dönüş oluşturucusu. Sınırlayıcı kutular, aralıktaki her sayfanın içerik akışı analiz edilerek eklenir; içerik akışı ayrıştırılamayan bir sayfa atlanır ve ağacın geri kalanını bozulmadan bırakır.

AstNode değişmezdir. Ağaç güncellemeleri, etkilenen düğümleri aşağıdan yukarıya yeniden oluşturur; değişmemiş alt ağaçlar özdeşlikle döndürülür. AstMutator aynı sözleşmeyi izler: her değişiklik yeni bir AstDocument döndürür, yalnızca kökten hedefe giden yolu yeniden oluşturur ve paylaşılan MutationLog içine bir MutationEntry kaydeder.

AstWriter, bir MutationLog’u OVERLAY modunda yalnızca ekleme yapılan bir artımlı güncelleme olarak uygular: yeni overlay içerik akışları, güncellenmiş sayfa nesneleri, yalnızca yeni nesneleri kapsayan bir çapraz başvuru bölümü ve /Prev değeri önceki startxref’i işaret eden bir trailer. Orijinal baytlar, ISO 32000-2:2020, 7.5.6’nın artımlı güncelleme modeli uyarınca bozulmadan bırakılır. Updated girişleri için çizilen değiştirme metni, ISO 32000-2:2020, 7.3.4.2 uyarınca değişmez dizelerdeki \, ( ve ) karakterlerini kaçış karakterine alır.

AstPdfEmitter::emit(), yapı ağacı okumasının simetrik tersidir: okuyucu tarafından üretilen ağaçlar, düğüm kimliği yeniden numaralandırması ve belgelenmiş kanonikleştirme sınıfları dışında yapısal olarak eşdeğer ağaçlara gidip gelir. Düğümlerde bulunan MCID’ler, asla yeniden atanmadan birebir yeniden yayılır.

  • Şifrelenmiş girdi, herhangi bir ağaç işinden önce reddedilir; şifrelenmiş PDF’ler için kısmi ağaç sonucu yoktur. Önce şifreyi çözün.
  • Kaynak tavanları: en çok düğüm (varsayılan 100,000), en çok derinlik (varsayılan 200), en çok bellek (varsayılan 256 MiB), gerçek zaman aşımı (varsayılan 30 s). Bir tavanı aşmak AstBuildLimitException fırlatır; zaman aşımı, bir alt sınıf olan AstBuildTimeoutException fırlatır.
  • Sayfa aralığı 0 tabanlı ve dahildir; null sınırlar tüm sayfalar anlamına gelir.
  • İçerik akışı ayrıştırılamayan bir sayfa, sınırlayıcı kutu eklenmesi sırasında atlanır; ağacın geri kalanı etkilenmez.
  • AstCache::get() asla fırlatmaz: hatalı biçimlendirilmiş, kurcalanmış veya dize olmayan yükler null döndürür ve yeniden oluşturmaya zorlar. AstCache::set(), arka uç yazma veya anında geri okuma başarısız olduğunda yüksek sesle başarısız olur.
  • AstMutator, düğüm kimliği bulunamadığında InvalidArgumentException fırlatır. Bilinmeyen güncelleme anahtarları sessizce yok sayılır; yalnızca text_content uygulanır.
  • AstWriter::write(), girdide bir %PDF- başlığı veya bulunabilir bir startxref olmadığında AstWriteException fırlatır. Sınırlayıcı kutusu olmayan girişler sessizce atlanır. Nesne taramasıyla bulunamayan sayfalar — örneğin sıkıştırılmış çapraz başvuru akışları altında — atlanır; hiçbir overlay uygulanamazsa, girdi baytları değiştirilmeden döndürülür.
  • OVERLAY çıktısı bir redaksiyon değildir. Beyaz dikdörtgen ve yeniden çizilen metin eklenir; orijinal içerik baytları dosyada kalır ve ham çıkarımla kurtarılabilir. Bunu GDPR Art. 17 silme işlemi veya yasal redaksiyon için kullanmayın. Kaynak ağaçta bir yeniden yapılandırma modu yazıcısı bulunur, ancak dahili olarak işaretlenmiştir, üretime hazır değildir ve desteklenen API yüzeyinin dışındadır.
  • Overlay geometrisi, yazıcı sayfa MediaBox’ını okumadığı için A4 dikey (595 x 842 pt) varsayar. A4 olmayan sayfalarda overlay biraz yanlış hizalanabilir; çıktı yapısal olarak geçerli kalır.
  • writeAndVerify() yalnızca yapıyı denetler: başlık, sondaki %%EOF ve çıktı büyümesi. Değiştirilen belgeyi semantik olarak yeniden ayrıştırmaz.
  • AstPdfEmitter::emit(), kök bir Document düğümü olmadığında veya alt öğesi olmadığında AstEmitException fırlatır. OBJR (ek açıklama) eşlik girişleri bu sürümde yayılmaz.
  • Bu modül hiçbir kriptografik işlem yapmaz ve hiçbir FIPS’e özgü davranış tanımlamaz. SHA-256 yalnızca önbellek anahtarları için içerik adresleme olarak görünür.

Yapı ağacı yolu, ISO 32000-2 tarafından tanımlanan etiketli PDF mantıksal yapı olanaklarını okur; yazım sırasında mevcut olan RAG külliyatı mantıksal yapı hükümlerini içermez, bu nedenle bu ifade kaynak açıklamalarından ürün temellidir. Yazıcının artımlı güncelleme düzeni ISO 32000-2:2020, 7.5.6’yı (aşağıda alıntılanmıştır) izler ve değişmez dize kaçışı ISO 32000-2:2020, 7.3.4.2’yi (aşağıda alıntılanmıştır) izler.

Bu ifadeler, alıntılanan hükümlere karşı yeteneği açıklar. NextPDF hiçbir uygunluk sertifikasına sahip değildir ve bir hükmün desteklenmesi bir sertifika iddiası değildir.

  • Yüklenen her PdfReader için bir AstBuilder oluşturun. Ayrıştırmayı amorti etmek için derlemeler arasında bir AstCache yeniden kullanın; anahtar tasarımı, seçenek değişikliklerini kendiliğinden geçersiz kılar.
  • Yazıcının tam olarak kaydedilen oturumu uygulaması için bir AstMutator ile AstWriter arasında bir MutationLog paylaşın. Bağımsız düzenleme oturumları arasında resetLog() çağırın.
  • Düzen kaynaklı gruplama, yalın geri dönüş ağacına tercih edildiğinde etiketsiz belgeler için useHeuristic değerini true olarak ayarlayın.
  • Derlemeler, özdeş baytlar ve seçenekler için belirlenimcidir; anlık görüntü tarzı testler için buna güvenin.
  • Derleme başarısızlıklarını NextPDF\Pro\Ast\Exception hiyerarşisi aracılığıyla, yazma başarısızlıklarını NextPDF\Pro\Ast\Writer hiyerarşisi aracılığıyla yakalayın; ikisi, RuntimeException altında bir temeli paylaşmaz.

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ı, runbook dosya adları ve bilet önekleri kapsam dışıdır.