Tekstinhoud maken die downstreamtools kunnen extraheren
In een oogopslag
Sectie met titel “In een oogopslag”NextPDF Core is een PDF-producer. Het bevat geen publieke PDF-naar-tekstlezer. Binnen Core betekent „tekstinhoud extraheren” dat u het document zo opbouwt dat de tekst extraheerbaar is. De glyphs zijn voorzien van een /ToUnicode-CMap en het document heeft een getagde logische structuur. Een conforme lezer of downstream-extractietool kan de Unicode-tekst vervolgens in leesvolgorde reconstrueren.
Tekst uit een willekeurige PDF van derden lezen is werk voor de consumer. Gebruik voor die taak de sidecar van de Inspect-module of een externe tool, niet de producer-API van Core.
Installeren
Sectie met titel “Installeren”composer require nextpdf/core:^3Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”Tekstweergave-operators in de content stream plaatsen tekst op een pagina (ISO 32000-2 §9.4.3). Glyphcodes zijn geen Unicode. Met een /ToUnicode-CMap kan een lezer die codes voor extractie terugmappen naar Unicode (ISO 32000-2 §9.10.2). Een getagde structuurboom legt de logische leesvolgorde vast, zodat extractie de tekst in documentvolgorde kan reconstrueren in plaats van in tekenvolgorde (ISO 32000-2 §14.8).
enableTaggedPdf() bouwt die structuurboom op en zorgt dat de /ToUnicode-CMap voor lettertypen met een ingesloten subset behouden blijft. Samen maken deze functies de uitvoer betrouwbaar extraheerbaar.
API-oppervlak
Sectie met titel “API-oppervlak”Document::enableTaggedPdf(string $lang = 'en') bouwt de structuurboom op en stelt de conformiteitsmodus in die de /ToUnicode-CMap behoudt. Document::setLanguage(string $lang) legt de BCP 47-taaltag vast. Roep beide methoden aan voordat u inhoud schrijft. Schrijf de tekst daarna met de gebruikelijke setFont()- / cell()- / multiCell()-API.
Codevoorbeeld — snelstart
Sectie met titel “Codevoorbeeld — snelstart”<?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());Codevoorbeeld — productie
Sectie met titel “Codevoorbeeld — productie”Dit op zichzelf staande programma draait in de harness. Het komt overeen met examples/38-extract-text-content.php. Het maakt een getagd document waarin de tekst aan een /ToUnicode-CMap en een logische leesvolgorde is gekoppeld. Een downstream-extractor kan de Unicode-tekst vervolgens op volgorde reconstrueren.
<?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);Verwachte STDOUT:
Wrote a tagged PDF with extractable text contentParagraphs authored: 3Text is recoverable via the /ToUnicode CMap + tagged reading order.Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Producer, geen lezer. Core heeft geen publieke
extractText(). Tekst uit een bestaande PDF van derden lezen is een taak voor de consumer. Gebruik de Inspect-module met de Spectrum-sidecar of een externe extractietool. Dit recipe maakt uw uitvoer extraheerbaar. - Configureer tagging eerst. Roep
enableTaggedPdf()aan voordat u inhoud schrijft, zodat de structuurboom de tekst in leesvolgorde vastlegt. Een aanroep nadat inhoud is toegevoegd, tagt de eerdere inhoud niet. - Ongeldige taaltag.
enableTaggedPdf()valideert de BCP 47-tag en gooitInvalidConfigExceptionwanneer de tag ongeldig is. Gebruik een geregistreerde tag, zoalsen,zh-Hant-TWofja. - Platte (ongetagde) uitvoer. Zonder
enableTaggedPdf()kan platte uitvoer de/ToUnicode-CMap voor vooraf gedefinieerde CMap-lettertypen onderdrukken om de bestandsgrootte te beperken. Extractie is dan onbetrouwbaar voor die lettertypen. Tag het document wanneer u extraheerbare tekst nodig hebt.
Prestaties
Sectie met titel “Prestaties”Tagging voegt de structuurboom toe en behoudt /ToUnicode-CMaps, waardoor de uitvoergrootte bescheiden toeneemt. De kosten schalen mee met de hoeveelheid inhoud en veranderen niets aan het single-pass-weergavemodel.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”Getagde tekstinhoud is per ontwerp machineleesbaar. Plaats geen geheimen in documenttekst in de verwachting dat ze verborgen blijven. Iedereen met het bestand kan extraheerbare tekst extraheren. Dit is een recipe voor producer-correctheid, geen vertrouwelijkheidsmaatregel. Raadpleeg voor vertrouwelijkheid het versleutelingsrecipe.
Conformiteit
Sectie met titel “Conformiteit”| Bewering | Specificatie | Clausule | reference_id |
|---|---|---|---|
| Een ToUnicode-CMap mapt tekencodes naar Unicode voor tekstextractie. | ISO 32000-2 | §9.10.2 | |
| Tekstweergave-operators plaatsen strings op de pagina in de content stream. | ISO 32000-2 | §9.4.3 | |
| Een getagde structuurboom legt de logische leesvolgorde vast voor extractie. | ISO 32000-2 | §14.8 |
Dit recipe produceert tekstinhoud die extraheerbaar is. Het claimt geen PDF/UA-2-conformiteit; die wordt door een checker bepaald. Raadpleeg het toegankelijkheidsrecipe.