Yapısal bilgiler için PDF'yi ayrıştırın ve inceleyin
Bir bakışta
“Bir bakışta” başlıklı bölümBu tarifte, bir Taşınabilir Belge Biçimi (PDF) dosyasından yapısal bilgileri okumak için Core denetçisinin Quick yedek uygulaması kullanılır. Sürümü, sayfa sayısını, şifreleme işaretini, imza işaretini, ek işaretini, dosya boyutunu ve risk işaretlerini elde edersiniz. Quick, Spectrum yardımcı bileşeni veya ağ erişimi gerektirmeden tamamen süreç içinde çalışır. Bunu bir doğrulayıcı olarak değil, hızlı ön eleme için kullanın.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/core:^3Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümBir PDF dosyası, sürümünü dosya başlığında kaydeder (ISO 32000-2 §7.5.2). Fragman, iki bayt dizisi olarak bir dosya tanımlayıcısı (/ID) taşır (ISO 32000-2 §7.5.5). Bir imza mevcut olduğunda, imza sözlüğü Ayırt Edici Kodlama Kuralları (DER) ile kodlanmış Şifreleme Mesajı Sözdizimi (CMS) SignedData verisini Contents içinde saklar (ISO 32000-2 §12.8.1). Quick yedek uygulaması, sürümü, sayfa sayısı tahminini ve şifreleme, imza ile ek varlığı işaretlerini çıkarmak için belge baytları üzerinde sınırlı bir tarama yapar.
API yüzeyi
“API yüzeyi” başlıklı bölümÖnce new Inspector() oluşturun ve ardından ->inspect(string $pdfData, InspectConfig::quick()) çağırın. Dönen InspectResult şunları içerir: $pdfVersion, $pageCount, $isEncrypted, $hasSigned, $hasAttachments, $fileSizeBytes, $riskFlags ve hasRisks() yardımcısı.
Kod örneği — hızlı başlangıç
“Kod örneği — hızlı başlangıç” başlıklı bölüm<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Inspect\InspectConfig;use NextPDF\Inspect\Inspector;
$pdf = file_get_contents(__DIR__ . '/document.pdf');$result = (new Inspector())->inspect($pdf, InspectConfig::quick());
printf( "v%s, %d page(s), encrypted=%s, signed=%s\n", $result->pdfVersion ?? '?', $result->pageCount, $result->isEncrypted ? 'yes' : 'no', $result->hasSigned ? 'yes' : 'no',);Kod örneği — üretim
“Kod örneği — üretim” başlıklı bölümBu bağımsız program cookbook test düzeneğinde çalışır. examples/39-parse-and-inspect-pdf.php dosyasını yansıtır: bellekte küçük, çok sayfalı bir PDF oluşturur, yapısal bilgilerini Quick yedek uygulamasıyla okur ve güven kararı yerine bu bilgilere göre yönlendirme yapar. Yönlendirme dalı açıklayıcı niteliktedir. Bunu kendi işlem hattınız, doğrulayıcı kuyruğunuz ve karantinanızla değiştirin.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Inspect\InspectConfig;use NextPDF\Inspect\Inspector;
// A self-contained input so the program runs with no external file.$doc = Document::createStandalone();$doc->setTitle('Parse-and-inspect demo');$doc->setAuthor('NextPDF Cookbook');$doc->addPage();$doc->setFont('helvetica', '', 12);$doc->cell(0, 10, 'Page one of the parse-and-inspect demonstration.', newLine: true);$doc->addPage();$doc->cell(0, 10, 'Page two.', newLine: true);$pdf = $doc->getPdfData();
$result = (new Inspector())->inspect($pdf, InspectConfig::quick());
echo 'PDF version : ' . ($result->pdfVersion ?? 'unknown') . "\n";echo 'Pages : ' . $result->pageCount . "\n";echo 'Encrypted : ' . ($result->isEncrypted ? 'yes' : 'no') . "\n";echo 'Signed : ' . ($result->hasSigned ? 'yes' : 'no') . "\n";echo 'Attachments : ' . ($result->hasAttachments ? 'yes' : 'no') . "\n";echo 'File size : ' . $result->fileSizeBytes . " bytes\n";echo 'Risk flags : ' . ($result->hasRisks() ? count($result->riskFlags) : 0) . "\n";
// Route on structural facts, not trust verdicts. Replace these calls with// your own pipeline / verifier queue / quarantine.if ($result->isEncrypted) { // $pipeline->decryptThenContinue($pdf); echo "Route: decrypt-then-continue\n";} elseif ($result->hasSigned) { // $verifierQueue->enqueue($pdf); // see the signature-inspect recipe echo "Route: enqueue for cryptographic verification\n";} elseif ($result->hasRisks()) { // $quarantine->hold($pdf, $result->riskFlags); echo "Route: quarantine (risk flags present)\n";} else { // $pipeline->continue($pdf); echo "Route: continue (no risks, unsigned, unencrypted)\n";}
// The harness sets NEXTPDF_COOKBOOK_OUTPUT and runs this script under the// semantic profile; emit the document to the side-channel.$out = getenv('NEXTPDF_COOKBOOK_OUTPUT');file_put_contents($out !== false && $out !== '' ? $out : __DIR__ . '/inspected.pdf', $pdf);Beklenen standart çıktı (STDOUT) aşağıdaki gibidir (sürüm ve boyut yapıya bağlıdır; tanıtım PDF’si şifrelenmemiş, imzalanmamış ve risksizdir):
PDF version : <version>Pages : 2Encrypted : noSigned : noAttachments : noFile size : <n> bytesRisk flags : 0Route: continue (no risks, unsigned, unencrypted)Uç durumlar ve dikkat edilecek noktalar
“Uç durumlar ve dikkat edilecek noktalar” başlıklı bölüm- Quick, doğrulama değil, ön elemedir. Neyin mevcut olduğunu ve neyin eksik olduğunu raporlar. İmzaları doğrulamaz, içeriğin şifresini çözmez veya uygunluk iddiasında bulunmaz. Sonucu yalnızca bir yönlendirme girdisi olarak değerlendirin.
- Sayfa sayısı bir tahmindir. Quick yedek uygulaması, sayfa nesnesi işaretlerini sayar. Kasıtlı olarak bozulmuş bir nesne grafiği sayımı çarpıtabilir. Tam bir sayıma ihtiyaç duyduğunuzda Spectrum destekli derinlikleri kullanın.
- Standard / Full için yardımcı bileşen gerekir.
new InspectConfig()(derinlikStandard) veInspectConfig::full()Spectrum yardımcı bileşenini gerektirir. Yardımcı bileşen kullanılamadığındaINSPECT-SIDECAR-001hatası fırlatılır ve sessizce Quick seviyesine düşülmez. - Boş girdi. Boş bir dize geçirmek, “PDF data must not be empty” iletisiyle bir denetim istisnası fırlatır.
- Şifreleme işaretinin kapsamı. İşaret, bir
/Encryptfragman girdisini yansıtır. İşaretlenmiş bir dosyanın şifresi denetçi tarafından çözülmez.
Performans
“Performans” başlıklı bölümQuick yedek uygulaması, tam bir ayrıştırma değil, sınırlı bir tarama kullanır. Bunu, daha ağır işlemlerden önce yüksek hacimli gelen dosya akışını önceden yönlendirmek için kullanın.
Güvenlik notları
“Güvenlik notları” başlıklı bölümDenetçi süreç içinde çalışır ve yalnızca yapısal işaretleri okur. Belge baytlarının hiçbiri ana makineden ayrılmaz ve hiçbir belge metni çıkarılmaz. Gömülü JavaScript gibi bir risk işareti, tavsiye niteliğinde bir yönlendirme sinyalidir. Bu, dosyanın güvenli veya güvensiz olduğuna dair bir iddia değildir.
Uygunluk
“Uygunluk” başlıklı bölüm| İfade | Belirtim | Madde | reference_id |
|---|---|---|---|
| Dosya başlığı, PDF sürümünü kaydeder. | ISO 32000-2 | §7.5.2 | |
Fragmanın /ID girdisi, iki bayt dizisinden oluşan bir dosya tanımlayıcısıdır. | ISO 32000-2 | §7.5.5 | |
Bir imza sözlüğünün Contents girdisi, DER CMS SignedData verisini tutar. | ISO 32000-2 | §12.8.1 |
Bu tarif yalnızca yapısal bilgileri raporlar. Dosyanın geçerli, güvenli veya uygun olduğunu iddia etmez.
Ticari bağlam
“Ticari bağlam” başlıklı bölümStandard ve Full denetim derinlikleri Spectrum yardımcı bileşeni üzerinden çalışır. Daha zengin nesne, yazı tipi ve görüntü analizi eklerler. Burada belgelenen Quick yedek uygulaması Core kapsamındadır ve çevrimdışı çalışır.