Oluşturma ve G/Ç hataları
Kapsam
“Kapsam” başlıklı bölümBu girişler, HTML işlem hattı içeriği yerleştirirken, sayfalı-ortam çözümleyicisi sayfa geometrisi atarken, metin şekillendiricisi karmaşık betikleri işlerken, tipografi aşaması satırları keserken, yazıcı bir belgeyi serileştirirken, okuyucu mevcut bir PDF’i ayrıştırırken ve üst veri aşaması bir Genişletilebilir Üst Veri Platformu (XMP) paketini okurken fırlatılan oluşturma ve girdi/çıktı (G/Ç) istisnalarını kapsar.
Aşağıda iki temel hiyerarşi görünür ve bu fark, bir catch sonrasında hangi
tanılama verisini okuyabileceğinizi belirler:
NextPdfException,ContextAwareExceptionInterface::getContext(): arrayyöntemini uygular. Temel uygulama boş bir dizi döndürür; bir alt sınıf, yalnızcagetContext()yöntemini geçersiz kıldığında yapılandırılmış anahtarlar taşır. Onu geçersiz kılmayan alt sınıflar verilerini yine depublic readonlyözellikler üzerinden sunar.- Buradaki çeşitli sınıflar, doğrudan PHP’nin
RuntimeExceptionsınıfını genişletir. Bunlar bağlam farkında değildir ve birgetContext()yöntemleri yoktur; bunun yerinegetMessage()çıktısını ve genel özelliklerini okuyun.
Her giriş, tam sınıfı, tetikleme koşulunu, taşıdığı bağlam anahtarlarını veya genel özellikleri ve kurtarma yolunu adlandırır.
HTML yerleşimi ve sayfalı ortam
“HTML yerleşimi ve sayfalı ortam” başlıklı bölümUnsplittableContentException
“UnsplittableContentException” başlıklı bölüm- Ne zaman fırlatılır. HTML yerleşim motoru,
break-inside: avoidolarak işaretlenmiş içeriğin (kesme kısıtlamasıAvoidolan bir tablo hücresi) ölçülen yüksekliği tek bir sayfanın kullanılabilir yüksekliğini aştığında bunu fırlatır. Motor, hem kesme-kaçınma kısıtlamasını hem de sayfa sınırını karşılayamaz; bu nedenle sessizce taşmak yerine başarısız olur. - Taşınan veri.
NextPdfExceptionsınıfını genişletir ancakgetContext()yöntemini geçersiz kılmaz; bu nedenlegetContext()boş bir dizi döndürür. Tanılama verisipublic readonlyözelliklerdedir:gridRow(int),gridCol(int),contentHeight(float, nokta) vepageHeight(float, nokta). İleti, hücre koordinatlarını ve her iki yüksekliği adlandırır. - Çözüm. Hatalı hücredeki
break-inside: avoidkısıtlamasını kaldırın, hücrenin içeriğini bir sayfaya sığacak şekilde azaltın ya da kullanılabilir yükseklik içeriği barındıracak şekilde sayfa boyutunu artırın veya kenar boşluklarını azaltın.
BudgetExceededException
“BudgetExceededException” başlıklı bölüm- Ne zaman fırlatılır. Saklanan-kip yerleşim ilkelleri, mimari karar kaydı
ADR-020’de tanımlanan dört kaynak-bütçesi katmanından biri aşıldığında ve
çağıran, yumuşak yedek yerine sert bir başarısızlığı tercih ettiğinde bunu
fırlatır. Varsayılan yol fırlatmaz:
ContainerLayout::acceptChild()falsedöndürür, çağıran blok yerleşimine geri döner ve bir uyarı yayılır. İstisna, yapılandırma-zamanı doğrulaması ve tam ihlal demetini öne süren testler için ayrılmıştır. Katmanlar şunlardır:per-child(yakalanan bir alt akış üst sınırını aşar),per-container(Tier 1 düğüm-sayısı bütçesi),per-document(yerleşim-geçişi veya iç içe geçme-derinliği bütçesi) veglobal(SDK geneli 256 MB tepe yerleşik-küme-boyutu tavanı). - Taşınan veri.
getContext()yöntemini geçersiz kılar; bu, uygulama performansı izleme (APM) araçları tarafından tüketilen kararlı bir sekiz-anahtar biçimi döndürür:budgetTier,exceededValue,budgetLimit,containerType,phase,breachOrigin,captureSizeveprocessedItemCount. İlk dört anahtar özgün v1.0.0 alt kümesidir ve her zaman doldurulur; sonraki dördü, yapıcı bunlar olmadan çağrıldığında varsayılan olaraknullya da0olur.getCausalWarningCode(), (katman, konteyner-türü) demetini, yumuşak-yedek yolunun yayacağıWarningCodedeğerine eşler. - Çözüm. Bir yapılandırma ihlali için istenen değeri belgelenmiş zarfa geri
düşürün (örneğin saklanan düğüm bütçesi,
Config::withRetainedNodeBudget()aracılığıyla5.000ila100.000kabul eder). Bir içerik ihlali için konteyner iç içe geçmesini veya düğüm sayısını azaltın ya da sert-başarısızlık yüzeyini tercih etmek yerine blok yerleşimine varsayılan yumuşak-yedeğe güvenin.
UnsupportedNamedPageException
“UnsupportedNamedPageException” başlıklı bölüm- Ne zaman fırlatılır. Sayfalı-ortam aşaması, bir belge adlandırılmış bir
@page <ident> { … }kuralı bildirdiğinde (page: <ident>özelliği üzerinden içeriğe bağlı) bunu güvenli biçimde başarısız olarak fırlatır. CSS Paged Media Level 3 §3.4 ve Level 4 §3.2’den adlandırılmış sayfalar —:first,:left,:rightve:blanksözde sınıfları ile adlandırılmışsize:verotate:geçersiz kılmaları dahil — ayrıştırılır ancak hiçbir üretim yerleşim yolu bunları tüketmez. Motor, kuralı atmanın üreteceği sessizce-yanlış varsayılan sayfalandırmayı yaymak yerine reddeder. - Taşınan veri.
getContext()yöntemini geçersiz kılar; bu,page_names(hataya yol açan farklı kimlikler listesi, kaynak sırasına göre),has_size_override(boole),has_rotate_override(boole) vehas_pseudo_classes(boole) döndürür. Aynı değerlerpageNames,hasSizeOverride,hasRotateOverridevehasPseudoClassesgenel özelliklerinde de sunulur. - Çözüm. Adlandırılmış
@page <ident>kurallarını ve tümpage: <ident>bağlarını kaldırın ve amaçlanan geometriyi, desteklenen adsız@page { … }kuralı ve onun sözde sınıf biçimleri aracılığıyla ifade edin. Alternatif olarak, tam adlandırılmış-sayfa yerleşim desteğini getiren bir gelecek sürüme sabitleyin.
Tipografi ve metin şekillendirme
“Tipografi ve metin şekillendirme” başlıklı bölümIcuRequirementException
“IcuRequirementException” başlıklı bölüm- Ne zaman fırlatılır. Metin bölütlemesi, Unicode için Uluslararası Bileşenler
(ICU) satır-kesme yineleyicisine ihtiyaç duyduğunda ancak ICU’yu zorunlu
kılan ilke etkinken (
NEXTPDF_REQUIRE_ICU=1) veext-intluzantısı ileIntlBreakIteratorkullanılamazken bunu fırlatır. - Taşınan veri. Doğrudan
RuntimeExceptionsınıfını genişletir; bu nedenle bağlam farkında değildir ve birgetContext()yöntemi yoktur. Aynı kod yolunun önceden fırlattığı genel istisnanın katı bir incelmesidir; bu nedenle mevcutcatch (\RuntimeException)işleyicileri çalışmaya devam eder. - Çözüm. ICU kesme yineleyicisinin kullanılabilir olması için
ext-intlyükleyip etkinleştirin ya da ICU’yu zorunlu kılan ilkenin zorunlu olmadığı yerde ICU olmayan bölütleyiciye geri dönmek içinNEXTPDF_REQUIRE_ICUdeğerini kaldırın.
ScriptShaperException
“ScriptShaperException” başlıklı bölüm- Ne zaman fırlatılır. Bu, betik-şekillendirme hizmet sağlayıcı arayüzü (SPI) için temel istisnadır. Bugün doğrudan fırlatılmaz; bunun yerine somut alt türler fırlatılır. Herhangi bir şekillendirme hatasını tek bir yerde işlemek için bu türü yakalayın.
- Taşınan veri. Doğrudan
RuntimeExceptionsınıfını genişletir; bağlam farkında değildir,getContext()yoktur. - Çözüm. Somut alt türe göre dallanın. Geçerli sürümde gönderilen tek alt tür
için aşağıdaki
NotYetImplementedExceptiongirişine bakın.
NotYetImplementedException
“NotYetImplementedException” başlıklı bölüm- Ne zaman fırlatılır. Her yer tutucu betik-şekillendiricisi, somut
şekillendirmesi ertelenmiş betikler (Moğolca ve Tibetçe) için
shape()gövdesinden bunu fırlatır. Şekillendirme SPI bağlantısı mimari olarak hazırdır ancak gerçek şekillendirme, ana dili konuşan biri tarafından doğrulanmış bir sınama düzeneği beklemektedir. Sessiz bir işlem-yok yerine bir istisna fırlatmak, etiketli erişilebilirlik öne süren bir PDF’e şekillendirilmemiş metin yaymaktansa, kazara üretim bağlantısını çalışma zamanında yüzeye çıkarır. - Taşınan veri.
ScriptShaperException(ve dolayısıylaRuntimeException) sınıfını genişletir; bu nedenle bağlam farkında değildir ve birgetContext()yöntemi yoktur. Tanılama verisipublic readonlyözelliklerindedir:bcp47LanguageTag(çalıştırmanın BCP-47 etiketi, örneğinmn-Mongveyabo-Tibt) vemissingCapability(uygulamanın eksik olduğu somut yetenek). İleti her ikisini de içerir. - Çözüm. Uygulanmamış betiklerdeki çalıştırmaları üretimde şekillendiriciden geçirmeyin. Dil etiketini yukarı akışta algılayın ve ya farklı bir oluşturma yoluna geri dönün ya da etkilenen betik için şekillendirmeyi getiren bir gelecek sürüme sabitleyin.
Yazıcı çıktı profilleri ve şifreleme
“Yazıcı çıktı profilleri ve şifreleme” başlıklı bölümPdf14FeatureRejectedException
“Pdf14FeatureRejectedException” başlıklı bölüm- Ne zaman fırlatılır. Yazıcı, bir belge, daha sonraki PDF sürümlerinde getirilen yapıları yasaklayan PDF 1.4 çıktı profili (ISO 19005-1:2005 / PDF/A-1) altında yasak bir özellik içerdiğinde bunu fırlatır.
- Taşınan veri.
NextPdfExceptionsınıfını genişletir ancakgetContext()yöntemini geçersiz kılmaz; bu nedenlegetContext()boş bir dizi döndürür. Tanılama verisipublic readonlyözelliklerindedir:feature(reddedilen özellik adı),reason(neden yasak olduğu) veisoClause(ISO hüküm başvurusu). İleti, üçünü de birleştirir. - Çözüm. Reddedilen özelliği kaldırın veya PDF 1.4 ile uyumlu bir eşdeğerle değiştirin ya da özelliğe izin veren daha yüksek bir çıktı profilini hedefleyin.
Pdf20FeatureRejectedException
“Pdf20FeatureRejectedException” başlıklı bölüm- Ne zaman fırlatılır. Yazıcı, bir belge, katı PDF 2.0 çıktı profili altında yasak bir özellik içerdiğinde bunu fırlatır. ISO 32000-2:2020, PDF 1.7’nin hâlâ izin verdiği yapıları kullanımdan kaldırır — en başta, uyumlu bir PDF 2.0 belgesinde gömülmesi gereken Standart 14 Type 1 yazı tipleri (§9.6.2).
- Taşınan veri.
Pdf14FeatureRejectedExceptionile aynı biçim:NextPdfExceptionsınıfını genişletir,getContext()yöntemini geçersiz kılmaz (boş bir dizi döndürür) vefeature,reasonileisoClausedeğerlerinipublic readonlyözellikler olarak sunar. - Çözüm. Reddedilen özelliği düzeltin — örneğin base 14 yazı tiplerini gömün —
ya da var olduğunda belgelenmiş çıkış kapısını kullanın (gömülü olmayan base 14
yazı tipleri için
Document::allowNonEmbeddedBase14()).
PublicKeyEncryptionUnsupportedException
“PublicKeyEncryptionUnsupportedException” başlıklı bölüm- Ne zaman fırlatılır.
PdfWriter::build(), belgeninencryptionModedeğeripubkey(bir açık anahtar alıcı listesi) olduğunda, yazıcı tarafı açık-anahtar akış-gövdesi şifreleme yönlendirmesi bağlanmadan önce, giriş noktasında bunu fırlatır. Baştan reddetmek, çağıranın şifrelenmiş sandığı şifrelenmemiş bir PDF’i sessizce yaymayı önler. - Taşınan veri. Doğrudan
RuntimeExceptionsınıfını genişletir; bu nedenle bağlam farkında değildir ve birgetContext()yöntemi yoktur. Aynı sitenin önceden fırlattığı genel istisnanın katı bir incelmesidir; bu nedenle mevcutcatch (\RuntimeException)işleyicileri çalışmaya devam eder. - Çözüm. Açık anahtar alıcı listesi yerine desteklenen bir şifreleme kipi (parola tabanlı şifreleme) kullanın ya da açık-anahtar şifreleme desteğini getiren bir sürüme sabitleyin. Bu fırlatıldığında çıktıyı şifrelenmiş olarak ele almayın.
Okuyucu ve üst veri girdisi
“Okuyucu ve üst veri girdisi” başlıklı bölümUnsupportedPdfStructureException
“UnsupportedPdfStructureException” başlıklı bölüm- Ne zaman fırlatılır. Nesne-grafiği okuyucusu, bir girdi PDF’i desteklenen
zarfının dışına düştüğünde bunu güvenli biçimde başarısız olarak fırlatır.
Okuyucu, klasik çapraz başvuru tablolarını (ISO 32000-2:2020 §7.5.4), çapraz
başvuru akışlarını (§7.5.8), nesne-akışı-sıkıştırılmış nesneleri (§7.5.7),
çok-revizyonlu
/Prevzincirlerini (§7.5.6) ve/XRefStmaracılığıyla melez-başvuru dosyalarını (§7.5.8.4) destekler. Bu zarfın dışındaki herhangi bir şey, kısmi veya tahmin edilmiş bir ayrıştırma yerine bu istisnayı yüzeye çıkarır. Adlandırılmış yapıcılar, neden durumlarına eşlenir:encrypted(),damagedCrossReference(),cyclicReferenceChain(),nonConformantObjectStream(),irresolvableObjectCollision(),truncatedFile()vecrossReferenceOffsetOutOfBounds(). - Taşınan veri. Doğrudan
RuntimeExceptionsınıfını genişletir; bu nedenle bağlam farkında değildir ve birgetContext()yöntemi yoktur. Çağıranların iletiyi ayrıştırmadan kesin kategoriye göre dallanması içinUnsupportedPdfStructureReasontüründe (bir enum)public readonlybirreasonözelliği sunar; isteğe bağlı birdetaildizesi ve birpreviousfırlatılabilir nesnesi sınırlı, hassas-olmayan bağlam ekleyebilir. Varsayılan ileti, nedenin sızdırmayan özetidir. - Çözüm.
reasondeğerine göre dallanın.EncryptedDocumentiçin, şifre çözme okuyucunun kapsamı dışında olduğundan, okumadan önce bir şifre çözme adımı çalıştırın.DamagedCrossReference,TruncatedFileya daCrossReferenceOffsetOutOfBoundsiçin dosyayı hatalı veya eksik olarak ele alın ve kaynağı yeniden edinin ya da onarın.CyclicReferenceChain,NonConformantObjectStreamya daIrresolvableObjectCollisioniçin girdi, yapısal modeli ihlal eder ve olduğu gibi okunamaz.
PacketTooLargeException
“PacketTooLargeException” başlıklı bölüm- Ne zaman fırlatılır. Akışlı XMP üst veri okuyucusu, gömülü bir XMP paketi yapılandırılmış bayt tavanını aştığında bunu fırlatır. Varlık-genişletme ve ikinci dereceden-patlama tarzı girdilere karşı savunmacı bir korumadır (gigabayt ölçeğindeki gömülü XMP’ye karşı 128 MB tepe tavanı).
- Taşınan veri.
NextPdfExceptionsınıfını genişletir ancakgetContext()yöntemini geçersiz kılmaz; bu nedenlegetContext()boş bir dizi döndürür. Tanılama verisipublic readonlyözelliklerindedir:byteCount(gözlemlenen bayt sayısı) vecap(bayt cinsinden yapılandırılmış üst sınır). İleti, her ikisini de bildirir. - Çözüm. Aşırı büyük üst veriyi kötü amaçlı veya hatalı olarak reddedin ya da atlayın. Meşru bir belge gerçekten daha büyük bir pakete ihtiyaç duyuyorsa, korumanın önlemek için var olduğu bellek-tükenmesi riskini tartarak yapılandırılmış üst sınırı bilerek yükseltin.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölüm- Hata başvurusu dizini
- Yazı tipleri ve etiketleme sorun giderme —
NotYetImplementedException,ScriptShaperExceptionveIcuRequirementExceptionbelirtileri için. - PDF/A ve PDF/UA doğrulama sorun giderme —
Pdf14FeatureRejectedExceptionvePdf20FeatureRejectedExceptionbelirtileri için. - Şifreleme ve izinler sorun giderme —
PublicKeyEncryptionUnsupportedExceptionve okuyucununEncryptedDocumentnedeni için.