Aşağı akış araçları tarafından çıkarılabilecek metin içeriği üretin
Bir bakışta
“Bir bakışta” başlıklı bölümNextPDF Core, bir PDF üreticisidir. Herkese açık bir PDF’den metne okuyucu API’si içermez. Core bağlamında “metin içeriğini çıkarma”, belgeyi metni çıkarılabilir olacak şekilde oluşturmanız anlamına gelir. Glifler bir /ToUnicode CMap taşır ve belge, etiketli bir mantıksal yapıya sahiptir. Bunun ardından uyumlu bir okuyucu veya aşağı akış çıkarma aracı, Unicode metni okuma sırasına göre geri kazanabilir.
Herhangi bir üçüncü taraf PDF’den metin okumak, tüketici işidir. Bu görev için Core’un üretici yüzeyini değil, Inspect modülü yardımcısını veya harici bir aracı kullanın.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/core:^3Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümİçerik akışındaki metin gösterme işleçleri, sayfaya metin yerleştirir (ISO 32000-2 §9.4.3). Glif kodları Unicode değildir. Bir /ToUnicode CMap, okuyucunun bu kodları çıkarma amacıyla yeniden Unicode’a eşlemesine olanak tanır (ISO 32000-2 §9.10.2). Etiketli bir yapı ağacı mantıksal okuma sırasını kaydeder; böylece çıkarma işlemi metni boyama sırası yerine belge sırasına göre geri kazanabilir (ISO 32000-2 §14.8).
enableTaggedPdf() bu yapı ağacını oluşturur ve gömülü alt küme yazı tipleri için /ToUnicode CMap’i korur. Bu özellikler birlikte çıktıyı güvenilir biçimde çıkarılabilir kılar.
API yüzeyi
“API yüzeyi” başlıklı bölümDocument::enableTaggedPdf(string $lang = 'en') yapı ağacını oluşturur ve /ToUnicode CMap’i koruyan uyumluluk modunu ayarlar. Document::setLanguage(string $lang) BCP-47 dil etiketini kaydeder. Her iki yöntemi de içerik yazmadan önce çağırın. Ardından metni her zamanki setFont() / cell() / multiCell() yüzeyiyle yazın.
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\Core\Document;
$doc = Document::createStandalone();$doc->setLanguage('en');$doc->enableTaggedPdf('en'); // structure tree + ToUnicode retention$doc->addPage();$doc->setFont('helvetica', '', 12);$doc->multiCell(0, 7, 'This text is extractable by a downstream reader.');
file_put_contents(__DIR__ . '/extractable.pdf', $doc->getPdfData());Kod örneği — üretim
“Kod örneği — üretim” başlıklı bölümBu bağımsız program, test düzeneğinde çalışır. examples/38-extract-text-content.php dosyasını yansıtır. Metnin bir /ToUnicode CMap ve mantıksal okuma sırası taşıdığı etiketli bir belge oluşturur. Ardından aşağı akıştaki bir çıkarıcı, Unicode metni sırayla geri kazanabilir.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$paragraphs = [ 'NextPDF produces documents whose text content is extractable.', 'A tagged structure tree records the logical reading order.', 'The ToUnicode CMap lets a reader recover Unicode from glyph codes.',];
$doc = Document::createStandalone();$doc->setTitle('Extractable text content');$doc->setAuthor('NextPDF Cookbook');$doc->setLanguage('en'); // BCP 47; validated on enableTaggedPdf()
// Configure tagged mode BEFORE content so the structure tree captures the// text in reading order and the /ToUnicode CMap is retained.$doc->enableTaggedPdf('en');
$doc->addPage();$doc->setFont('helvetica', '', 12);foreach ($paragraphs as $p) { $doc->multiCell(0, 7, $p); // captured in reading order $doc->ln(2);}
$pdf = $doc->getPdfData();// $pdf contains a /StructTreeRoot and per-font /ToUnicode CMaps; an external// extractor (or the Inspect sidecar) recovers the Unicode text in order.
echo "Wrote a tagged PDF with extractable text content\n";echo 'Paragraphs authored: ' . count($paragraphs) . "\n";echo "Text is recoverable via the /ToUnicode CMap + tagged reading order.\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__ . '/extractable.pdf', $pdf);Beklenen STDOUT:
Wrote a tagged PDF with extractable text contentParagraphs authored: 3Text is recoverable via the /ToUnicode CMap + tagged reading order.Uç durumlar ve tuzaklar
“Uç durumlar ve tuzaklar” başlıklı bölüm- Üretici, okuyucu değil. Core’da herkese açık bir
extractText()yoktur. Mevcut bir üçüncü taraf PDF’nin içinden metin okumak, tüketici görevidir. Inspect modülünü Spectrum yardımcısıyla kullanın veya harici bir çıkarma aracı kullanın. Bu reçete, sizin çıktınızı çıkarılabilir kılar. - Önce etiketlemeyi yapılandırın. İçerik yazmadan önce
enableTaggedPdf()çağırın; böylece yapı ağacı metni okuma sırasına göre yakalar. İçerik eklendikten sonra yapılan bir çağrı, önceki içeriği etiketlemez. - Geçersiz dil etiketi.
enableTaggedPdf()BCP-47 etiketini doğrular ve etiket geçersiz olduğundaInvalidConfigExceptionfırlatır. Kayıtlı bir etiket kullanın, örneğinen,zh-Hant-TWveyaja. - Düz (etiketsiz) çıktı.
enableTaggedPdf()olmadan düz çıktı, boyutu küçültmek için önceden tanımlı CMap yazı tiplerinde/ToUnicodeCMap’i bastırabilir. Bu durumda çıkarma işlemi bu yazı tipleri için güvenilir değildir. Çıkarılabilir metne ihtiyaç duyduğunuzda belgeyi etiketleyin.
Performans
“Performans” başlıklı bölümEtiketleme, yapı ağacını ekler ve /ToUnicode CMap’leri korur; bu nedenle çıktı boyutu sınırlı ölçüde artar. Ek maliyet, içerik hacmiyle ölçeklenir ve tek geçişli işleme modelini değiştirmez.
Güvenlik notları
“Güvenlik notları” başlıklı bölümEtiketli metin içeriği, tasarımı gereği makine tarafından okunabilir. Gizli bilgileri belge metnine yerleştirip gizli kalmalarını beklemeyin. Dosyaya sahip olan herkes çıkarılabilir metni çıkarabilir. Bu, bir gizlilik denetimi değil, üretici doğruluğuna odaklanan bir reçetedir. Gizlilik için şifreleme reçetesine bakın.
Uyumluluk
“Uyumluluk” başlıklı bölüm| İfade | Standart | Madde | reference_id |
|---|---|---|---|
| Bir ToUnicode CMap, metin çıkarma için karakter kodlarını Unicode’a eşler. | ISO 32000-2 | §9.10.2 | |
| Metin gösterme işleçleri, içerik akışında sayfaya dizeler yerleştirir. | ISO 32000-2 | §9.4.3 | |
| Etiketli bir yapı ağacı, çıkarma için mantıksal okuma sırasını kaydeder. | ISO 32000-2 | §14.8 |
Bu reçete, çıkarılabilir metin içeriği üretir. Bir denetleyicinin belirlediği PDF/UA-2 uyumluluğunu ileri sürmez. Erişilebilirlik reçetesine bakın.