İçeriğe geç

Uyumluluğu doğrulama: süreç içi ön denetim ve harici kâhin

NextPDF’in saf PHP, süreç içi uyumluluk doğrulayıcılarını hızlı bir yapısal ön denetim olarak çalıştırmak ve ardından yetkili uyumluluk kararını bağımsız bir doğrulayıcıya bırakmak için bu tarifi kullanın. Süreç içi denetimler gereklidir, ancak yeterli değildir: temiz bir sonuç yapısal bir gerçektir; uyumluluk kararı değildir. Bu tarif, examples/33-validate-conformance.php dosyasını ve onun tests/Cookbook/Php/ValidateConformanceRecipeTest.php test düzeneğini kullanır.

Terminal window
composer require nextpdf/core:^3

Süreç içi doğrulayıcılar harici bir araç zinciri gerektirmez. Yetkili geçit adımı için PATH üzerinde harici bir doğrulayıcıya ihtiyacınız vardır. Örnekte veraPDF kullanılır. Bir Pro veya Enterprise paketine ihtiyacınız yoktur.

NextPDF, \NextPDF\Compliance\Validator altında süreç içi doğrulayıcılar sağlar. Bunlar, harici bir süreç başlatmadan belirli normatif değişmezleri doğrular:

  • PdfRValidator — ISO 23504-1 (PDF/R-1) §5/§6 bayt akışı denetimlerini çalıştırır: dosya başlığı izin listesi, oluşum-0 nesneleri, §6.5.7 sayfa içeriği işleci izin listesi (yalnızca q/Q/cm/Do) ve §6.4.3 Info sözlüğü anahtar izin listesi. Yalın bir PdfRValidationFinding[] döndürür; boş bir liste, geçide tabi her §6 denetiminin geçtiği anlamına gelir.
  • ArlingtonValidator — PDF Association’ın makine tarafından okunabilir Arlington dil bilgisini yalnızca rapor kipinde çalıştırır. Yapıyı asla geçide tabi tutmaz ve denetim tüketicilerinin bilinen bir yukarı akış anlık görüntüsüyle bağlantı kurabilmesi için her bulguda sabitlenmiş dil bilgisi işleme SHA değerini kaydeder.

Bu denetimlerin kapsamı bilinçli olarak sınırlandırılmıştır. Bir yayımlama sözleşmesi ile bir belirtim arasındaki sapmayı yakalarlar, ancak PDF/A-4 veya PDF/UA-2 gibi bir profil için ISO uyumluluğunu kanıtlamazlar. Bu belirlemeyi bağımsız bir doğrulayıcı yapar ve onun kararı yapı geçididir (ISO 19005-4 §6.7.3 bunu PDF/A için açıkça belirtir). Bu tarif sınırı net tutar: ön denetimi süreç içinde çalıştırır, ardından kararı veren harici kâhin komutunu yazdırır ve çalıştırır.

Aşağıdaki şema iki aşamalı geçidi gösterir. Akışı tek bir kural yönetir: uyumluluk olarak yalnızca harici kâhinin kararı bildirilebilir.

Findings

Clean

Pass

Fail

Produced PDF bytes

In-process pre-check

PdfRValidator / Arlington

Structural drift?

Fail fast — cheap reject

NOT a conformance verdict

Necessary, not sufficient

never report as conformance

Independent external validator

the authoritative oracle

Oracle verdict

May report file conforming

Not conforming — do not ship

Diagram

API yüzeyi PHPDoc’tan üretilir. Şu ana giriş noktalarını kullanın:

  • \NextPDF\Compliance\Validator\PdfRValidator::validate(string $pdfBytes): list<PdfRValidationFinding>
  • \NextPDF\Compliance\Validator\PdfRValidationFinding (salt okunur: clause, severity, message)
  • \NextPDF\Compliance\Validator\ArlingtonValidator::validateReportOnly(string $pdfPath): list<ArlingtonFinding>
  • \NextPDF\Core\Document::output(?string $filename, OutputDestination $dest): string (ham baytlar için OutputDestination::String)
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Compliance\Validator\PdfRValidator;
use NextPDF\Contracts\OutputDestination;
use NextPDF\Core\Document;
$doc = Document::createStandalone();
$doc->addPage();
$doc->setFont('helvetica', '', 12);
$doc->cell(0, 10, 'Document under conformance review.', newLine: true);
$bytes = $doc->output(dest: OutputDestination::String);
$findings = (new PdfRValidator())->validate($bytes);
// A finding list is a structural fact, not a conformance verdict.
echo $findings === []
? "No in-process PDF/R-1 findings (necessary, not sufficient).\n"
: count($findings) . " in-process finding(s); not a conformance verdict.\n";

Üretimde, süreç içi doğrulayıcıyı bariz yapısal sapmalarda hızla başarısız olan düşük maliyetli bir geçit olarak ele alın. Ardından harici kâhini yetkili uyumluluk kararı olarak çalıştırın. Uyumluluk olarak yalnızca kâhinin kararı bildirilebilir.

examples/33-validate-conformance.php (gate core)
$bytes = $doc->output(dest: OutputDestination::String);
$doc->save($out);
// 1. In-process pre-check — necessary, not sufficient.
$findings = (new PdfRValidator())->validate($bytes);
foreach ($findings as $finding) {
fwrite(STDERR, sprintf("[%s] §%s — %s\n",
$finding->severity, $finding->clause, $finding->message));
}
// 2. The authoritative gate — the external validator decides.
$exitCode = 0;
$report = [];
exec('verapdf --flavour 4 ' . escapeshellarg($out), $report, $exitCode);
if ($exitCode !== 0) {
fwrite(STDERR, "veraPDF FAILED — not reported conforming\n");
fwrite(STDERR, implode("\n", $report) . "\n");
exit(1);
}
echo "veraPDF PASS — the validator reports the file conforming\n";

Örneği php examples/33-validate-conformance.php ile çalıştırın. Sıradan bir PDF oluşturur ve süreç içi bulguları yazdırır. Sıradan bir PDF’in PDF/R-1 bulguları üretmesi beklenir; asıl öğretici nokta da bu sonuçtur. Örnek daha sonra yetkili harici kâhin komutunu yazdırır.

  • Gerekli, ancak yeterli değil. Boş bir PdfRValidator bulgu listesi, geçide tabi §6 denetimlerinin geçtiği anlamına gelir; bundan fazlası değildir. Bu, bir PDF/A-4 veya PDF/UA-2 uyumluluk iddiası değildir. Tek başına bir süreç içi sonuçtan asla uyumluluk bildirmeyin.
  • Sıradan bir PDF, tasarımı gereği PDF/R-1’i geçemez. PDF/R-1 yalnızca görüntü içeren bir raster profilidir; sıradan bir metin PDF’i, haklı olarak §6.5.7 ve §6.4.3 bulguları üretir. Örnek, asıl noktayı vurgulamak için bunu bilinçli olarak gösterir: süreç içi çıktı yapısal bir gerçektir, karar değildir.
  • Arlington yalnızca rapor amaçlıdır. ArlingtonValidator::validateReportOnly() asla istisna fırlatmaz ve asla geçide tabi tutmaz. Yalnızca dil bilgisi kipinde, sabitlenmiş dil bilgisi SHA değerinin yüklendiğini kanıtlayan bir info bulgusu yayar; dil bilgisi gerçekleştirilmediğinde boş bir liste döndürür. Bunun üzerine bir pass/fail geçidi kurmayın — bu bir çapraz denetim eseridir.
  • Baytlar mı, dosya mı. PdfRValidator::validate() ham bayt dizesini alır (OutputDestination::String); harici kâhinin dosya yoluna ihtiyacı vardır. Kâhin adımı için dosyayı save() ile kaydedin.
  • Boş girdi. PdfRValidator::validate() işlevine boş veya başlıksız bir dize geçirildiğinde, istisna fırlatmak yerine bir §6.2.2 hata bulgusu döndürür. Bulgu listesini denetleyin; istisna varsaymayın.

Süreç içi doğrulayıcılar, PDF üzerinde tek geçişli düzenli ifade ve bayt taramaları kullanır. Tipik belgelerde düşük bellek ayırma kullanımıyla hızlıdırlar ve 2000 ms / 128 MB bütçesinin içinde kalırlar. Harici kâhin mevcutsa duvar saati süresini belirleyen ana etken olur, ancak süreç dışında çalışır. Anlamsal yeniden üretilebilirlik profili geçerlidir. Örneğin değeri, gözlemlenebilir doğrulama davranışıdır ve test düzeneği bu davranışı yapısal bir soyut sözdizimi ağacı (AST) ile üst veri karşılaştırması aracılığıyla denetler.

Doğrulayıcılar belge baytlarını süreç içinde okur ve hiçbir şey süreçten dışarı çıkmaz. Harici kâhin ise dosyayı alır. Barındırılan bir doğrulayıcı çalıştırırsanız, belge içeriği sınırınızın dışına çıkar. Hassas içerikler için yerel bir doğrulayıcı ikili dosyasını tercih edin veya doğrulamadan önce karartma uygulayın.

Bulgular nesne yollarını ve işleç parçalarını alıntılayabilir. Örnek, bulguları STDERR’e ve sabit bir ilerleme satırını STDOUT’a yazar. Hassas belgelerde bulgu günlüklerini paylaşılan toplama noktalarının dışında tutun. Ham PDF baytlarını asla günlüğe kaydetmeyin.

Temiz bir süreç içi sonuç, bütünlük veya sahicilik sinyali değildir. Düşmanca bir üretici, kapsamı sınırlı süreç içi denetimleri geçen ancak tam doğrulayıcıda başarısız olan ya da iyi biçimlendirilmiş ama yanıltıcı olan bir dosya oluşturabilir. Süreç içi geçişi hızlı bir filtre olarak ele alın, asla güven sinyali olarak değil.

Bu tarif hiçbir kriptografik işlem gerçekleştirmez. Federal Information Processing Standards (FIPS) kipi bu tarifin davranışını değiştirmez. Güven materyalinin imzalanması, şifrelenmesi veya özetlenmesi gerçekleşmez.

BeyanBelirtimMaddereference_id
PDF/R-1 sayfa içeriği yalnızca q/Q/cm/Do işleç izin listesini kullanır.ISO 23504-1§6.5.7
PDF/R-1 sayfaları yalnızca görüntü içeren raster içeriğidir.ISO 23504-1§6.5.5
PDF/R-1, belge bilgisi sözlüğü anahtarlarını kısıtlar.ISO 23504-1§6.4.4
Arlington dil bilgisi, makine tarafından okunabilir bir nesne modeli çapraz denetimidir.Arlington PDF Modelgrammar
Uyumluluğa üretici değil, bir doğrulayıcı karar verir.ISO 19005-4§6.7.3

NextPDF’in süreç içi doğrulayıcıları belirli normatif değişmezleri doğrular. Destek uyumluluk değildir; doğrulama sertifikalandırma değildir. Temiz bir süreç içi sonuç ISO uyumluluğunu kanıtlamaz; bu belirlemeyi bağımsız bir doğrulayıcı (örneğin veraPDF) yapar. Onun kararını yapı geçidi olarak kullanın.