Generare contenuto testuale estraibile dagli strumenti a valle
In breve
Sezione intitolata “In breve”NextPDF Core è un produttore di PDF. Non espone alcun lettore pubblico da PDF a testo. Nel contesto di Core, «estrarre contenuto testuale» significa creare il documento in modo che il testo sia estraibile. I glifi sono accompagnati da una CMap /ToUnicode e il documento dispone di una struttura logica taggata. Un lettore conforme o uno strumento di estrazione a valle può quindi recuperare il testo Unicode nell’ordine di lettura.
Rileggere il testo da un PDF arbitrario di terze parti è un compito del consumatore. Questo lavoro spetta al sidecar del modulo Inspect o a uno strumento esterno, non alla superficie API del produttore Core.
Installazione
Sezione intitolata “Installazione”composer require nextpdf/core:^3Panoramica concettuale
Sezione intitolata “Panoramica concettuale”Gli operatori di visualizzazione del testo nel flusso di contenuto posizionano il testo su una pagina (ISO 32000-2 §9.4.3). I codici dei glifi non sono Unicode. Una CMap /ToUnicode consente a un lettore di rimappare tali codici su Unicode per l’estrazione (ISO 32000-2 §9.10.2). Un albero di struttura taggato registra l’ordine di lettura logico, così l’estrazione recupera il testo nell’ordine del documento anziché nell’ordine di disegno (ISO 32000-2 §14.8).
enableTaggedPdf() costruisce questo albero di struttura e mantiene la CMap /ToUnicode per i font incorporati come sottoinsieme. Questa combinazione rende l’output estraibile in modo affidabile.
Superficie API
Sezione intitolata “Superficie API”Document::enableTaggedPdf(string $lang = 'en') costruisce l’albero di struttura e imposta la modalità di conformità che preserva la CMap /ToUnicode. Document::setLanguage(string $lang) registra la lingua naturale BCP-47. Chiamare entrambi prima di scrivere il contenuto. Scrivere poi il testo con la consueta superficie setFont() / cell() / multiCell().
Esempio di codice — Avvio rapido
Sezione intitolata “Esempio di codice — Avvio rapido”<?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());Esempio di codice — Produzione
Sezione intitolata “Esempio di codice — Produzione”Questo è il programma autonomo eseguito dall’harness. Rispecchia examples/38-extract-text-content.php. Crea un documento taggato il cui testo include una CMap /ToUnicode e un ordine di lettura logico; un estrattore a valle può quindi recuperare il testo Unicode in ordine.
<?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);STDOUT atteso:
Wrote a tagged PDF with extractable text contentParagraphs authored: 3Text is recoverable via the /ToUnicode CMap + tagged reading order.Casi limite e insidie
Sezione intitolata “Casi limite e insidie”- Produttore, non lettore. Core non espone un metodo
extractText()pubblico. Leggere il testo da un PDF di terze parti esistente è un compito del consumatore. Usare il modulo Inspect con il sidecar Spectrum oppure uno strumento di estrazione esterno. Questa ricetta rende estraibile il tuo output. - Configurare prima il tagging. Chiamare
enableTaggedPdf()prima di scrivere il contenuto, in modo che l’albero di struttura acquisisca il testo nell’ordine di lettura. Una chiamata effettuata dopo l’aggiunta del contenuto non tagga il contenuto precedente. - Tag di lingua non valido.
enableTaggedPdf()convalida il tag BCP-47 e generaInvalidConfigExceptionse non è valido. Usare un tag registrato, per esempioen,zh-Hant-TWoja. - Output semplice (non taggato). Senza
enableTaggedPdf(), l’output semplice può sopprimere la CMap/ToUnicodeper i font con CMap predefinita per ridurre le dimensioni del file. L’estrazione risulta quindi inaffidabile per quei font. Taggare il documento quando l’estraibilità è importante.
Prestazioni
Sezione intitolata “Prestazioni”Il tagging aggiunge l’albero di struttura e mantiene le CMap /ToUnicode; questo aumenta moderatamente le dimensioni dell’output. Il costo è proporzionale al volume di contenuto e non modifica il modello di rendering a passaggio singolo.
Note sulla sicurezza
Sezione intitolata “Note sulla sicurezza”Il contenuto testuale taggato è, per progettazione, leggibile dalle macchine. Non inserire segreti nel testo del documento aspettandosi che restino nascosti: se il testo è estraibile, chiunque possieda il file può estrarlo. Questa è una ricetta sulla correttezza del produttore, non un controllo di riservatezza. Per la riservatezza, consultare la ricetta sulla cifratura.
Conformità
Sezione intitolata “Conformità”| Dichiarazione | Specifica | Clausola | reference_id |
|---|---|---|---|
| Una CMap ToUnicode mappa i codici dei caratteri su Unicode per l’estrazione del testo. | ISO 32000-2 | §9.10.2 | |
| Gli operatori di visualizzazione del testo posizionano le stringhe sulla pagina nel flusso di contenuto. | ISO 32000-2 | §9.4.3 | |
| Un albero di struttura taggato registra l’ordine di lettura logico per l’estrazione. | ISO 32000-2 | §14.8 |
Questa ricetta genera contenuto testuale estraibile. Non asserisce la conformità a PDF/UA-2, la cui determinazione spetta a un checker. Consultare la ricetta sull’accessibilità.