İçeriğe geç

Uyumluluk: PDF/R-1 doğrulayıcısı, Arlington dil bilgisi ve yaşam döngüsü araçları

NextPDF\Compliance, tamamlanmış bir Portable Document Format (PDF) dosyasını okuyan ve dosyanın normatif bir sözleşmeden hangi noktalarda ayrıldığını raporlayan bayt akışı doğrulayıcıları ile bir dil bilgisi çapraz denetimi sunar. Bir doğrulayıcı sıfır bulgu döndürdüğünde, sonuç yalnızca uyguladığı maddeler açısından denetlenmiş sayılır. Bu, kapsamlı bir sertifika değildir.

Terminal window
composer require nextpdf/core:^3

Modül üç bölümden oluşur.

PdfRValidator, aday bir ISO 23504-1:2020 (PDF/R-1) bayt akışını doğrular. Yazıcının iç durumu üzerinde değil, ham baytlar üzerinde çalışır. Yazıcının üretmeyi amaçladığı çıktı ile belirtimin gerektirdiği çıktı arasındaki sapmayı yakalar ve son denetim katmanıdır. Uygulanan madde kümesi v5.1.0 kümesine karşılık gelir: §5 sürüm tanımlama açıklaması, §6.2.2/§6.2.3 başlık izin listesi, §6.2.4 üretim-0 ve nesne akışı yasağı, §6.5.7 içerik akışı işleci izin listesi (yalnızca q, Q, cm, Do), §6.6.1 görüntü XObject anahtarı izin listesi, §6.4.3 Info sözlüğü anahtarı izin listesi ve §6.3 Catalog anahtarı izin listesi. §6.7 artımlı güncellemeler ve §6.8 şifreleme, bu ilk küme için açıkça kapsam dışıdır ve claims.json içinde bu şekilde bildirilir. Doğrulayıcı ilk bulguda durmaz. Tam farkı görebilmeniz için her sapmayı tek geçişte toplar.

PdfRConformancePolicy, PDF/R-1 çevresindeki önerilen ancak bilgilendirici bantlar için değişmez bir ilkedir. Normatif §6 temeli hiçbir zaman yapılandırılabilir değildir. İlke yalnızca §A.5 uygulama sınırı önerilerini, §6.6.1 çok şeritli yapının caydırılmasını ve aşağı akış PDF/A yeniden sınıflandırması için §A.6 XMP Extensible Metadata Platform (XMP) gereksinimini denetler.

ArlingtonValidator, üst akış PDF Association Arlington PDF modelini yalnızca rapor modunda çalıştırır. Mevcut döngü boyunca tavsiye niteliğindedir: validateReportOnly() asla özel durum fırlatmaz. Üç mod arasında kademeli olarak geri dönüş yapar. Referans denetleyici ikili dosyası kullanılabilir olduğunda, yapılandırılmış bulguları ayrıştırır. Yalnızca sabitlenmiş dil bilgisi kullanılabilir olduğunda, sabitlenmiş dil bilgisinin yüklendiğini kanıtlayan tek bir info bulgusu üretir. Dil bilgisi kullanılamadığında, boş bir liste döndürür. Bir WaiverRegistry, düzenleyicinin bilinen ve kabul edilebilir uyuşmazlıkları denetim izini koruyarak bastırmasına olanak tanır.

Dürüstlük kuralı, Cascading Style Sheets (CSS) destek matrisi ve uygunluk modülüyle aynıdır. Bir madde ancak başarılı bir test mevcut olduğunda ve normatif madde alıntılandığında Doğrulanmış sayılır. Uygulanmış ancak kendisine özgü başarılı bir test düzeneği bulunmayan bir madde İddia edilmiş sayılır. Kapsam dışı maddeler açıkça belirtilir. Belirsiz bırakılmazlar. Sıfır bulgu içeren bir PdfRValidator sonucu yalnızca denetlediği maddeleri ileri sürer. Uygulamadığı §6.7 veya §6.8 hakkında hiçbir iddiada bulunmaz.

TürÇeşitTemel üyeler
NextPDF\Compliance\Validator\PdfRValidatorfinal classvalidate(string $pdfBytes): list<PdfRValidationFinding>
NextPDF\Compliance\Validator\PdfRValidationFindingfinal readonly classstring $clause, 'error'|'warning'|'info' $severity, string $message
NextPDF\Compliance\Profile\PdfRConformancePolicyfinal readonly class__construct(bool $enforceA5ImplementationLimits = true, bool $rejectMultiStripPages = false, bool $requireXmpForA6Compatibility = false); lax(), strictArchival()
NextPDF\Compliance\Validator\ArlingtonValidatorfinal classvalidateReportOnly(string $pdfPath): list<ArlingtonFinding>
NextPDF\Compliance\Validator\WaiverRegistryfinal classisWaived(string $validator, string $ruleId, string $scopeKey): bool
<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\PdfRValidator;
$validator = new PdfRValidator();
$findings = $validator->validate(file_get_contents('candidate.pdf'));
if ($findings === []) {
// Zero divergences from the §6 clauses PdfRValidator implements.
// This is NOT a PDF/R-1 certificate — §6.7 and §6.8 are not checked.
echo "No PDF/R-1 §6 divergences detected (implemented clause set).\n";
} else {
foreach ($findings as $f) {
echo "[{$f->severity}] §{$f->clause}: {$f->message}\n";
}
}
<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\ArlingtonValidator;
use NextPDF\Compliance\Validator\ArlingtonGrammarLoader;
use NextPDF\Compliance\Validator\WaiverRegistry;
$validator = new ArlingtonValidator(
waivers: new WaiverRegistry(/* loaded waiver entries */),
grammar: new ArlingtonGrammarLoader(/* pinned submodule path */),
adapter: null, // grammar-only mode when the reference checker is absent
);
// Advisory by contract — never throws on findings.
$findings = $validator->validateReportOnly('artifact.pdf');
foreach ($findings as $finding) {
// Each finding pins the Arlington grammar commit SHA for provenance.
logger()->info('arlington', [
'rule' => $finding->ruleId,
'severity' => $finding->severity,
'grammarSha' => $finding->grammarSha,
]);
}
  • PdfRValidator tam bir ayrıştırıcı değil; normal ifade tabanlıdır. NextPDF\Writer\PdfRWriter bileşeninin belirlenimci çıktısını hedefler. Bunu genel bir PDF ayrıştırıcısı olarak değil, o yazıcı için bir sapma algılayıcısı olarak kullanın.
  • Sıfır bulgu ≠ tam PDF/R-1 uygunluğu. §6.7 (artımlı güncellemeler) ve §6.8 (şifreleme), v5.1.0 kümesinde uygulanmaz ve claims.json içinde kapsam dışı olarak bildirilir. Temiz bir sonucu “uygulanan madde kümesinde sapma yok” olarak değerlendirin, daha fazlası olarak değil.
  • Arlington tavsiye niteliğindedir. Mevcut döngüde, validateReportOnly() derlemeyi asla başarısız kılmaz. Sürekli tümleştirme (CI) sonucu tüketir ancak buna dayalı bir geçit uygulamaz.
  • PDF/A International Color Consortium (ICC) doğrulaması burada yer almaz. ISO 19005-4:2020 §6.2.2 OutputIntent ICC doğrulaması, Core’un Compliance modülünde değil, Enterprise PdfAManager (nextpdf/pro) içinde bulunur. Core’un PDF/A yüzeyi yalnızca ConformanceMode ayırıcısından ibarettir.
  • Feragatler denetim izini korur. Feragat edilen bir kural, bulgu listesinden bastırılır, ancak feragat girdisi neden feragat edildiğinin kaydı olarak kalır.

PdfRValidator::validate(), bayt akışı üzerinde sınırlı normal ifade gezintileriyle gerçekleştirilen tek bir doğrusal geçiştir. Maliyet, belge boyutuyla ölçeklenir ve modül bütçesinin oldukça içinde kalır. Yalnızca dil bilgisi modunda, ArlingtonValidator, yükleme kanıtı bulgusu için O(dil-bilgisi-kuralı-sayısı) karmaşıklığında çalışır. Referans denetleyici yolu bir alt işlem olarak çalışır ve NextPDF tarafından değil, üst akış aracı tarafından sınırlandırılır. Bu, bant dışı bir CI adımıdır.

Bu doğrulayıcılar güvenilmeyen PDF baytlarını okur. PdfRValidator, anahtar çıkarımından önce parantezli ve onaltılık değişmezleri ayıklar; böylece özel olarak hazırlanmış bir Creator dizesi sahte bir /Name anahtarı enjekte edemez (ISO 32000-1:2008 §7.3.4.2 kaçış işleme). Arlington bağdaştırıcısı, üst akış denetleyicisini sınırlı bir alt işlem olarak çalıştırır. Zaman aşımını veya yürütme hatasını, kısmi çıktıya güvenmek yerine “bulgu yok” olarak değerlendirir. PDF ayrıştırma saldırı yüzeyi için proje tehdit modeline bakın.

StandartMaddeCompliance modülünün yaptığı işlemDurum
ISO 23504-1:2020 (PDF/R-1)§6.5.7PdfRValidator, {q,Q,cm,Do} içerik akışı işleci izin listesini zorunlu kılarDoğrulanmış (birim + standart profili + tümleştirme testleri geçer)
ISO 23504-1:2020 (PDF/R-1)§6.4.3PdfRValidator, Info sözlüğü anahtarı izin listesini zorunlu kılarDoğrulanmış (testlerle desteklenir)
ISO 23504-1:2020 (PDF/R-1)§6.7, §6.8v5.1.0 kümesinde uygulanmazAçık kapsam dışı (claims.json içinde bildirilir)
ISO 32000-2:2020 (PDF 2.0)§7.5.2Catalog anahtarı izin listesi gezintisiİddia edilmiş (normal ifade gezintisi; yapısal)
ISO 19005-4:2020 (PDF/A-4)§6.7.3Conformance modülü aracılığıyla tanımlama şeması farkındalığıÇapraz başvuru (bkz. /specifications/pdfa4/)

Destek, uygunluk değildir. Hiçbir bulgu döndürmeyen bir PdfRValidator çalıştırması, yalnızca girdinin doğrulayıcının uyguladığı §6 maddelerinden sapmadığını kanıtlar. Dosyanın uyumlu bir PDF/R-1 dosyası olduğunu ileri sürmez: §6.7 ve §6.8 denetlenmez. Arlington çapraz denetimi tavsiye niteliğindedir ve asla uygunluk ileri sürmez. PDF/A-4 için yetkili doğrulayıcı veraPDF’tir ve bant dışında çalışır. veraPDF kâhini ve isteğe bağlı geçit uygulaması için uygunluk modülüne bakın.

Alıntılar, NextPDF uyumluluk derleminden başka sözcüklerle ifade edilmiştir. Tam 64 karakterlik reference_id özetleri, sayfa ön bilgisinde ve _normative-evidence-conf.md içinde kaydedilir.