สร้างเนื้อหาข้อความที่เครื่องมือปลายทางแยกดึงออกมาได้
ภาพรวมโดยย่อ
หัวข้อที่มีชื่อว่า “ภาพรวมโดยย่อ”NextPDF Core เป็น ผู้ผลิต PDF และไม่ได้มาพร้อมตัวอ่านที่แปลง PDF เป็นข้อความแบบสาธารณะ ในบริบทของ Core “การแยกดึงเนื้อหาข้อความ” หมายถึงการสร้างเอกสารให้ข้อความ สามารถแยกดึงออกมาได้ โดยรหัสกลิฟมี /ToUnicode CMap กำกับไว้ และเอกสารมีโครงสร้างเชิงตรรกะแบบ tagged จากนั้นตัวอ่านที่เป็นไปตามข้อกำหนดหรือเครื่องมือแยกดึงปลายทางจะกู้คืนข้อความ Unicode ตามลำดับการอ่านได้
การอ่านข้อความจาก PDF ของบุคคลที่สามใดๆ เป็นงานฝั่งผู้บริโภค ให้ใช้ sidecar ของโมดูล Inspect หรือเครื่องมือภายนอกสำหรับงานดังกล่าว งานนี้ไม่ใช่พื้นผิวฝั่งผู้ผลิตของ Core
การติดตั้ง
หัวข้อที่มีชื่อว่า “การติดตั้ง”composer require nextpdf/core:^3ภาพรวมเชิงแนวคิด
หัวข้อที่มีชื่อว่า “ภาพรวมเชิงแนวคิด”ตัวดำเนินการแสดงข้อความในสตรีมเนื้อหาวางข้อความลงบนหน้า (ISO 32000-2 §9.4.3) รหัสกลิฟไม่ใช่ Unicode โดยตรง /ToUnicode CMap ช่วยให้ตัวอ่านแมปรหัสเหล่านั้นกลับเป็น Unicode เพื่อการแยกดึง (ISO 32000-2 §9.10.2) ต้นไม้โครงสร้างแบบ tagged บันทึก ลำดับการอ่านเชิงตรรกะ ดังนั้นการแยกดึงจึงกู้คืนข้อความตามลำดับเอกสารแทนลำดับการวาด (ISO 32000-2 §14.8)
enableTaggedPdf() สร้างต้นไม้โครงสร้างนั้นและรักษา /ToUnicode CMap ไว้สำหรับฟอนต์แบบ embedded-subset เมื่อใช้ร่วมกัน ฟีเจอร์เหล่านี้ทำให้ผลลัพธ์แยกดึงออกมาได้อย่างน่าเชื่อถือ
พื้นผิว API
หัวข้อที่มีชื่อว่า “พื้นผิว API”Document::enableTaggedPdf(string $lang = 'en') สร้างต้นไม้โครงสร้างและตั้งค่าโหมดความสอดคล้องที่รักษา /ToUnicode CMap ไว้ Document::setLanguage(string $lang) บันทึกแท็กภาษา BCP-47 เรียกใช้เมท็อดทั้งสองก่อนเขียนเนื้อหา จากนั้นเขียนข้อความผ่านพื้นผิว setFont() / cell() / multiCell() ตามปกติ
ตัวอย่างโค้ด — เริ่มต้นอย่างรวดเร็ว
หัวข้อที่มีชื่อว่า “ตัวอย่างโค้ด — เริ่มต้นอย่างรวดเร็ว”<?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());ตัวอย่างโค้ด — สำหรับใช้งานจริง
หัวข้อที่มีชื่อว่า “ตัวอย่างโค้ด — สำหรับใช้งานจริง”โปรแกรมแบบเบ็ดเสร็จนี้ทำงานในฮาร์เนสและสอดคล้องกับ examples/38-extract-text-content.php โปรแกรมนี้สร้างเอกสารแบบ tagged ที่ข้อความมี /ToUnicode CMap และลำดับการอ่านเชิงตรรกะกำกับไว้ จากนั้นตัวแยกดึงปลายทางจะกู้คืนข้อความ Unicode ตามลำดับได้
<?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 ที่คาดไว้:
Wrote a tagged PDF with extractable text contentParagraphs authored: 3Text is recoverable via the /ToUnicode CMap + tagged reading order.กรณีขอบและข้อควรระวัง
หัวข้อที่มีชื่อว่า “กรณีขอบและข้อควรระวัง”- เป็นผู้ผลิต ไม่ใช่ตัวอ่าน Core ไม่มี
extractText()แบบสาธารณะ การอ่านข้อความ ออกจาก PDF ของบุคคลที่สามที่มีอยู่แล้วเป็นงานฝั่งผู้บริโภค ให้ใช้โมดูล Inspect ร่วมกับ sidecar ของ Spectrum หรือใช้เครื่องมือแยกดึงภายนอก สูตรนี้ทำให้ผลลัพธ์ ของคุณ แยกดึงออกมาได้ - กำหนดค่า tagging ก่อน เรียกใช้
enableTaggedPdf()ก่อนเขียนเนื้อหา เพื่อให้ต้นไม้โครงสร้างบันทึกข้อความตามลำดับการอ่าน การเรียกใช้หลังจากเพิ่มเนื้อหาแล้วจะไม่ tag เนื้อหาที่มีอยู่ก่อนหน้า - แท็กภาษาไม่ถูกต้อง
enableTaggedPdf()ตรวจสอบความถูกต้องของแท็ก BCP-47 และโยนInvalidConfigExceptionเมื่อแท็กไม่ถูกต้อง ให้ใช้แท็กที่ลงทะเบียนไว้ เช่นen,zh-Hant-TWหรือja - ผลลัพธ์แบบธรรมดา (untagged) หากไม่มี
enableTaggedPdf()ผลลัพธ์แบบธรรมดาอาจไม่ใส่/ToUnicodeCMap สำหรับฟอนต์ที่ใช้ CMap แบบกำหนดไว้ล่วงหน้าเพื่อลดขนาด การแยกดึงจึงไม่น่าเชื่อถือสำหรับฟอนต์เหล่านั้น ให้ tag เอกสารเมื่อคุณต้องการข้อความที่แยกดึงออกมาได้
ประสิทธิภาพ
หัวข้อที่มีชื่อว่า “ประสิทธิภาพ”การใช้ tagging เพิ่มต้นไม้โครงสร้างและรักษา /ToUnicode CMap ไว้ ดังนั้นขนาดผลลัพธ์จึงเพิ่มขึ้นเล็กน้อย ต้นทุนแปรผันตามปริมาณเนื้อหาและไม่เปลี่ยนแปลงโมเดลการเรนเดอร์แบบรอบเดียว
หมายเหตุด้านความปลอดภัย
หัวข้อที่มีชื่อว่า “หมายเหตุด้านความปลอดภัย”เนื้อหาข้อความแบบ tagged ถูกออกแบบให้อ่านด้วยเครื่องได้ อย่าวางข้อมูลลับไว้ในข้อความเอกสารแล้วคาดหวังว่าข้อมูลเหล่านั้นจะยังคงซ่อนอยู่ ผู้ใดก็ตามที่มีไฟล์สามารถแยกดึงข้อความนั้นได้ สูตรนี้ว่าด้วยความถูกต้องฝั่งผู้ผลิต ไม่ใช่มาตรการควบคุมการรักษาความลับ สำหรับการรักษาความลับ โปรดดูสูตรการเข้ารหัสลับ
ความสอดคล้องตามข้อกำหนด
หัวข้อที่มีชื่อว่า “ความสอดคล้องตามข้อกำหนด”| ข้อความระบุ | ข้อกำหนด | ข้อ | รหัสอ้างอิง (reference_id) |
|---|---|---|---|
| ToUnicode CMap แมปรหัสอักขระไปยัง Unicode สำหรับการแยกดึงข้อความ | ISO 32000-2 | §9.10.2 | |
| ตัวดำเนินการแสดงข้อความวางสตริงลงบนหน้าในสตรีมเนื้อหา | ISO 32000-2 | §9.4.3 | |
| ต้นไม้โครงสร้างแบบ tagged บันทึกลำดับการอ่านเชิงตรรกะสำหรับการแยกดึง | ISO 32000-2 | §14.8 |
สูตรนี้สร้างเนื้อหาข้อความที่แยกดึงออกมาได้ แต่ไม่ได้ยืนยันความสอดคล้องตาม PDF/UA-2 ซึ่งเป็นสิ่งที่เครื่องมือตรวจสอบเป็นผู้กำหนด โปรดดูสูตรด้านการเข้าถึง