เอกสารอ้างอิง API ของ Artisan
ภาพรวมโดยย่อ
หัวข้อที่มีชื่อว่า “ภาพรวมโดยย่อ”แพ็กเกจ Artisan (nextpdf/artisan) เปิดให้ใช้กลุ่ม API ที่เกี่ยวข้องกันสองกลุ่ม ส่วนเรนเดอร์ด้วย Chrome — ChromeRendererConfig, ChromeHtmlRenderer, ChromeSecurityPolicy, ChromeRenderResult, ViewportCalculator และ BrowserPool — แปลงส่วนย่อย Hypertext Markup Language (HTML) เป็นไฟล์ Portable Document Format (PDF) ที่ Chrome สร้างขึ้น ส่วนตัวแยกวิเคราะห์และตัวนำเข้า — PdfReader, PageImporter, ImportedFormXObject รวมถึงคลาสตัวแบ่งโทเค็นและคลาสตารางอ้างอิงไขว้ที่รองรับ — ฝังผลลัพธ์ที่เรนเดอร์แล้วกลับเข้าไปในเอกสาร NextPDF เป็น Form XObject ที่เลือกข้อความได้
เริ่มต้นที่นี่: หากต้องการเพียงไฟล์ PDF จาก HTML โดยทั่วไปไม่จำเป็นต้องใช้แพ็กเกจนี้โดยตรง ให้แนบ ChromeRendererConfig กับ NextPDF Document แล้วเรียก writeHtmlChrome() โปรดดู คู่มือเริ่มต้น ใช้คลาสด้านล่างเมื่อฝังตัวเรนเดอร์ไว้ใน worker หรือเรียกใช้การวินิจฉัยของตัวแยกวิเคราะห์ ตัวอย่างแรกในหัวข้องานที่พบบ่อยแสดงเส้นทางแบบเรียกครั้งเดียว
งานที่พบบ่อย
หัวข้อที่มีชื่อว่า “งานที่พบบ่อย”โฟลว์ทั้งสามด้านล่างครอบคลุมการใช้งานในระบบจริงเกือบทั้งหมด ตั้งแต่การเรียกระดับสูงสุดไปจนถึงไปป์ไลน์เรนเดอร์และนำเข้าแบบชัดแจ้ง ตัวอย่างแต่ละรายการตรวจสอบเทียบกับ nextpdf-Artisan/src (รวมถึงไฟล์ README.md / ci/tests/ ของแพ็กเกจ) แล้ว
เรนเดอร์ส่วนย่อย HTML ให้เป็น PDF ที่เลือกข้อความได้ด้วยการเรียกแบบมาตรฐาน
<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Artisan\ChromeRendererConfig;
require __DIR__ . '/vendor/autoload.php';
$config = new ChromeRendererConfig(chromeBinaryPath: '/usr/bin/chromium');
$doc = Document::createStandalone();$doc->setChromeRendererConfig($config);$doc->addPage();$doc->writeHtmlChrome('<div style="display:flex;gap:20px"><h2>Revenue</h2><p>$124,500</p></div>');$doc->save('/tmp/report.pdf');สิ่งที่ทำ: Chrome จัดวางส่วนย่อยนี้ ตัวเชื่อมจะฝังหน้า 0 เป็น Form XObject ข้อความจึงยังเลือกได้ writeHtmlChrome(string $html, ?float $width = null, ?float $height = null): static จะปรับความสูงให้พอดีโดยอัตโนมัติเมื่อ $height เป็น null
เรียกใช้ตัวเรนเดอร์และนำเข้าหน้าด้วยตนเองเมื่อต้องการไปป์ไลน์แบบชัดแจ้งที่อยู่เบื้องหลัง writeHtmlChrome() เช่น ใน worker หรือโฟลว์การวางตำแหน่งแบบกำหนดเอง
<?php
declare(strict_types=1);
use NextPDF\Artisan\ChromeHtmlRenderer;use NextPDF\Artisan\ChromeRendererConfig;use NextPDF\Artisan\ImportedFormXObject;use NextPDF\Artisan\PageImporter;use NextPDF\Parser\PdfReader;
$renderer = new ChromeHtmlRenderer(new ChromeRendererConfig(renderTimeout: 30));
try { $result = $renderer->render($html, widthPt: 595.28);
$reader = new PdfReader($result->getPdfData()); $reader->parse();
$form = (new PageImporter())->import($reader);} finally { $renderer->close();}สิ่งที่ทำ: เรนเดอร์ไบต์ PDF จาก Chrome แยกวิเคราะห์ไบต์เหล่านั้น แล้วนำเข้าหน้า 0 ไปยัง ImportedFormXObject ที่นำไปวางได้ เรียก close() บนตัวเรนเดอร์เสมอเพื่อปล่อยโปรเซส Chrome
สร้างคอนฟิกจากอาร์เรย์รูปแบบเฟรมเวิร์กสำหรับ config/*.php หรือพารามิเตอร์ของบันเดิล แทนการฮาร์ดโค้ดอาร์กิวเมนต์ของตัวสร้าง
<?php
declare(strict_types=1);
use NextPDF\Artisan\ChromeRendererConfig;
$config = ChromeRendererConfig::fromArray([ 'chrome_binary' => '/usr/bin/chromium', 'render_timeout' => 45, 'max_html_size' => 2_000_000, 'no_sandbox' => false,]);สิ่งที่ทำ: แมปอาร์เรย์คอนฟิกแบบ snake-case ไปยังตัวสร้าง คีย์ที่ไม่ได้กำหนดจะใช้ค่าเริ่มต้น และ chrome_binary จะถูกนำมาใช้เฉพาะเมื่อเป็นสตริงที่ไม่ว่างเท่านั้น
ตัวเรนเดอร์ Chrome
หัวข้อที่มีชื่อว่า “ตัวเรนเดอร์ Chrome”ชนิดข้อมูลเหล่านี้ใช้ดำเนินเส้นทางการเรนเดอร์ สร้าง ChromeRendererConfig ส่งต่อไปยัง ChromeHtmlRenderer แล้วเรียก render() เพื่อรับ ChromeRenderResult เป็นผลลัพธ์
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
new ChromeRendererConfig(?string $chromeBinaryPath = null, int $renderTimeout = 30, string $defaultCss = '', int $maxHtmlSize = 5000000, bool $noSandbox = false) | พาธของไบนารี ค่าหมดเวลา Cascading Style Sheets (CSS) ขีดจำกัดขนาด HTML และแฟล็ก sandbox | ตรวจหา Chrome โดยอัตโนมัติเมื่อพาธของไบนารีเป็น null; sandbox ยังคงเปิดใช้งานอยู่เว้นแต่จะถูกปิด | ChromeRendererConfig | ไม่คาดว่าจะมี | กำหนด noSandbox เฉพาะเมื่อสภาพแวดล้อมรันไทม์จำเป็นต้องใช้เท่านั้น |
ChromeRendererConfig::fromArray(array $config) | chrome_binary, render_timeout, default_css, max_html_size, no_sandbox รวมห้าคีย์ | ค่าที่ไม่มีจะใช้ค่าเริ่มต้นของตัวสร้าง | ChromeRendererConfig | ชนิดข้อมูลที่ไม่ตรงกันจะถอยกลับไปใช้ค่าเริ่มต้นสำหรับคีย์ที่เป็นทางเลือก | ตรงกับอาร์เรย์การกำหนดค่ารูปแบบเฟรมเวิร์ก |
new ChromeHtmlRenderer(ChromeRendererConfig $config, ?LoggerInterface $logger = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null) | คอนฟิก logger ที่เป็นทางเลือก และนโยบาย HTML ระดับการแยกวิเคราะห์ที่เป็นทางเลือก | ใช้ DefaultHtmlSecurityPolicy เมื่อไม่ได้ระบุนโยบาย | ChromeHtmlRenderer | ข้อผิดพลาดในการตั้งค่า Chrome จะเกิดขึ้นในการเรนเดอร์ครั้งแรก | ตัวเรนเดอร์เป็นเจ้าของ browser pool จนกว่าจะเรียก close() เท่านั้น |
ChromeHtmlRenderer::render(string $html, float $widthPt, float $heightPt = 0) | html: ส่วนย่อยอินพุต; widthPt: ความกว้างของกระดาษ; heightPt: ความสูงเป้าหมายหรืออัตโนมัติ | คำนวณความสูงของเนื้อหาโดยอัตโนมัติเมื่อ heightPt <= 0 | ChromeRenderResult | ChromeRenderException; การตรวจสอบขนาด HTML ล้มเหลว | บล็อกคำขอเครือข่ายสำหรับทรัพยากรย่อยผ่าน Chrome DevTools Protocol (CDP) |
ChromeHtmlRenderer::getHtmlSecurityPolicy() | ไม่มี | คืนค่านโยบายระดับการแยกวิเคราะห์ที่กำหนดไว้ | HtmlSecurityPolicyInterface | ไม่คาดว่าจะมี | เสริมการควบคุมระดับการขนส่งของ Chrome |
ChromeHtmlRenderer::close() | ไม่มี | ปิด browser pool และล้างข้อมูลภายใน | void | ข้อผิดพลาดในการปิดเบราว์เซอร์อาจปรากฏจากไลบรารีที่อยู่เบื้องล่าง | เรียกใช้ระหว่างการปิด worker |
นโยบายความปลอดภัยของ HTML
หัวข้อที่มีชื่อว่า “นโยบายความปลอดภัยของ HTML”ใช้ API เหล่านี้เมื่อต้องตรวจสอบและหุ้ม HTML ภายนอกก่อนเรนเดอร์ แทนการเรียก ChromeHtmlRenderer::render() โดยตรง ซึ่งเรียก API เหล่านี้อยู่แล้ว
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
ChromeSecurityPolicy::validate(string $html, int $maxSize) | อินพุต HTML และขนาดไบต์สูงสุด | ยอมรับอินพุตก็ต่อเมื่อขนาดและโครงสร้างที่ไม่อนุญาตผ่านการตรวจสอบเท่านั้น | void | ChromeRenderException หรือข้อยกเว้นของการตรวจสอบ | เรียกใช้ก่อนการเรนเดอร์ด้วยเบราว์เซอร์เมื่อรับ HTML ภายนอก |
ChromeSecurityPolicy::wrapHtml(string $html, int $viewportWidth, string $defaultCss = '') | ส่วนย่อย HTML ความกว้างของวิวพอร์ต และ CSS เริ่มต้นที่เป็นทางเลือก | สร้างเอกสารเรนเดอร์ที่สมบูรณ์เพื่อครอบส่วนย่อยนั้น | string | ข้อผิดพลาดในการตรวจสอบหรือการสร้างสตริง | แยก CSS เฉพาะของตัวเรนเดอร์ออกจาก HTML ของแอปพลิเคชัน |
ตัวช่วยจัดการผลลัพธ์และการแปลงค่า
หัวข้อที่มีชื่อว่า “ตัวช่วยจัดการผลลัพธ์และการแปลงค่า”ใช้ตัวช่วยเหล่านี้เพื่ออ่านผลลัพธ์การเรนเดอร์ (ChromeRenderResult) และแปลงค่าระหว่าง PDF point กับ CSS pixel ของ Chrome เมื่อกำหนดขนาดวิวพอร์ตหรือคำนวณความสูง
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
new ChromeRenderResult(string $pdfData, float $widthPt, float $heightPt, float $contentHeightCssPx) | ไบต์ PDF ดิบ ความกว้าง ความสูง และความสูงของเนื้อหาที่วัดได้ | ไม่มีการตรวจสอบอื่นนอกจากคุณสมบัติตัวสร้างที่ระบุชนิดไว้ | ChromeRenderResult | ไม่คาดว่าจะมี | โดยทั่วไป ChromeHtmlRenderer::render() คืนค่านี้อยู่แล้ว |
ChromeRenderResult::getPdfData() | ไม่มี | คืนค่าไบต์ PDF ดิบที่ผลิตโดย Chrome | string | ไม่คาดว่าจะมี | ใช้ร่วมกับ PdfReader และ PageImporter เมื่อทำการฝัง |
ChromeRenderResult::getWidthPt() | ไม่มี | คืนค่าความกว้างที่ร้องขอเป็นหน่วยพอยต์ | float | ไม่คาดว่าจะมี | ใช้กำหนดขนาดอ็อบเจกต์ form ที่นำเข้า |
ChromeRenderResult::getHeightPt() | ไม่มี | คืนค่าความสูงที่คำนวณได้หรือที่ร้องขอเป็นหน่วยพอยต์ | float | ไม่คาดว่าจะมี | ความสูงอัตโนมัติรวมบัฟเฟอร์สำหรับเค้าโครงการพิมพ์ไว้ด้วย |
ViewportCalculator::pointsToCssPx(float $pt) | pt: PDF point | แปลงค่าโดยใช้ 96 CSS px ต่อ 72 PDF point | int | ไม่คาดว่าจะมี | ปัดเศษสำหรับความกว้างวิวพอร์ตของ Chrome |
ViewportCalculator::cssPxToPoints(float $px) | px: CSS pixel | แปลงค่าโดยใช้ 72 PDF point ต่อ 96 CSS px | float | ไม่คาดว่าจะมี | ใช้คำนวณความสูงอัตโนมัติ |
API สำหรับการนำเข้าและตัวแยกวิเคราะห์
หัวข้อที่มีชื่อว่า “API สำหรับการนำเข้าและตัวแยกวิเคราะห์”นี่คือเส้นทางการนำเข้า แยกวิเคราะห์ไบต์ PDF ของ Chrome ด้วย PdfReader แล้วส่งตัวอ่านไปยัง PageImporter::import() เพื่อให้ได้หน้าที่ฝังได้ เมท็อด PdfReader อื่นๆรองรับการวินิจฉัย
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
new PdfReader(string $data) | data: ไบต์ PDF ที่สมบูรณ์ | ตัวแยกวิเคราะห์จะยังไม่ทำงานจนกว่าจะเรียก parse() | PdfReader | ไม่คาดว่าจะมี | ออกแบบมาสำหรับ PDF ที่สร้างโดย Chrome |
PdfReader::parse() | ไม่มี | แยกวิเคราะห์เชน cross-reference (xref) และ trailer | void | PdfParseException เมื่อโครงสร้าง PDF ไม่ถูกต้อง | ต้องเรียกก่อนการเข้าถึง object/page |
PdfReader::getObject(int $objNum) | หมายเลขอ็อบเจกต์ | แก้ค่าอ็อบเจกต์ที่แยกวิเคราะห์แล้วตามหมายเลข | PdfObject | PdfParseException เมื่ออ็อบเจกต์ขาดหายไปหรือมีรูปแบบไม่ถูกต้อง | ใช้หลังจากเรียก parse() แล้ว |
PdfReader::getTrailer() | ไม่มี | คืนค่าดิกชันนารี trailer ที่แยกวิเคราะห์แล้ว | array | PdfParseException เมื่อข้อมูล trailer ไม่พร้อมใช้งาน | ใช้โดยการวินิจฉัยและการวิเคราะห์การปรับปรุง |
PdfReader::getObjectNumbers() | ไม่มี | คืนค่าหมายเลขอ็อบเจกต์ที่แยกวิเคราะห์แล้ว | array | ไม่คาดว่าจะมีหลังจากการแยกวิเคราะห์ | มีประโยชน์สำหรับการวินิจฉัยตัวนำเข้า |
PdfReader::getPage(int $pageIndex) | pageIndex: ดัชนีหน้าที่เริ่มนับจากศูนย์ | ไม่มีการแยกวิเคราะห์โดยอัตโนมัติ | PdfObject | PdfParseException เมื่อขาดหายไปหรืออยู่นอกช่วง | ตัวนำเข้าใช้ค่าเริ่มต้นเป็นหน้า 0 เสมอ |
PdfReader::getPageContentStream(PdfObject $page) | page: อ็อบเจกต์หน้าที่แยกวิเคราะห์แล้ว | แก้ค่าสตรีมเนื้อหา | string | PdfParseException เมื่อสตรีมไม่ถูกต้อง | สตรีมที่ว่างเปล่าทำให้ตัวนำเข้าล้มเหลว |
PdfReader::getPageResources(PdfObject $page) | page: อ็อบเจกต์หน้าที่แยกวิเคราะห์แล้ว | แก้ค่าทรัพยากรของหน้า | array | PdfParseException เมื่อทรัพยากรไม่ถูกต้อง | ดิกชันนารีทรัพยากรถูกฝังไปพร้อมกับอ็อบเจกต์ form |
PdfReader::getPageMediaBox(PdfObject $page) | page: อ็อบเจกต์หน้าที่แยกวิเคราะห์แล้ว | ถอยกลับไปใช้ขนาดคล้าย A4 เมื่อไม่มีค่า | array | ความล้มเหลวของตัวแยกวิเคราะห์ | คืนค่าพิกัดในปริภูมิ PDF |
PdfReader::resolveRef(mixed $value) | ค่าที่แยกวิเคราะห์แล้ว | แก้ค่าการอ้างอิงอ็อบเจกต์แบบเรียกซ้ำในกรณีที่ทำได้ | mixed | PdfParseException เมื่อการอ้างอิงไม่ถูกต้อง | ตัวช่วยลักษณะภายในที่เปิดให้ใช้สำหรับเวิร์กโฟลว์ของตัวนำเข้า |
PdfReader::collectPageResources(PdfObject $page) | page: อ็อบเจกต์หน้าที่แยกวิเคราะห์แล้ว | ท่องไปตามการอ้างอิงทรัพยากรของหน้า | array | ความล้มเหลวของตัวแยกวิเคราะห์ | ใช้ฝังอ็อบเจกต์ที่ขึ้นต่อกันไปพร้อมกับหน้าที่นำเข้า |
PdfReader::getRevisionCount() | ไม่มี | นับจำนวนการปรับปรุงแบบเพิ่มทีละส่วนที่แยกวิเคราะห์แล้ว | int | ไม่คาดว่าจะมีหลังจากการแยกวิเคราะห์ | มีประโยชน์สำหรับ PDF ที่ลงนามหรืออัปเดตแบบเพิ่มทีละส่วน |
PdfReader::getRevisionXRef(int $index) | ดัชนีการปรับปรุงที่เริ่มนับจากศูนย์ | คืนค่าตาราง xref ของการปรับปรุงหนึ่งรายการ | RevisionXRefTable | PdfParseException เมื่อดัชนีไม่ถูกต้อง | ใช้สำหรับการวินิจฉัยการปรับปรุงระดับล่าง |
PdfReader::getRevisions() | ไม่มี | คืนค่าตาราง xref ของการปรับปรุงทั้งหมดที่แยกวิเคราะห์แล้ว | array | ไม่คาดว่าจะมีหลังจากการแยกวิเคราะห์ | มุมมองสถานะตัวแยกวิเคราะห์แบบอ่านอย่างเดียว |
PageImporter::import(PdfReader $reader, int $pageIndex = 0) | ตัวอ่านที่แยกวิเคราะห์แล้วและดัชนีหน้าที่เริ่มนับจากศูนย์ | นำเข้าหน้าแรกเมื่อไม่ได้ระบุ | ImportedFormXObject | PdfParseException เมื่อไม่สามารถสกัดหน้าออกมาได้ | รวบรวมสตรีมเนื้อหา media box ทรัพยากร และอ็อบเจกต์ที่ถูกอ้างอิง |
อ็อบเจกต์สนับสนุนของตัวแยกวิเคราะห์
หัวข้อที่มีชื่อว่า “อ็อบเจกต์สนับสนุนของตัวแยกวิเคราะห์”value object และตัวช่วยเหล่านี้คืนค่าโดยตัวแยกวิเคราะห์หรือใช้ภายใน ใช้เมื่อตรวจสอบอ็อบเจกต์ที่นำเข้า ทรัพยากร สตรีม หรือตารางการปรับปรุง
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
new ImportedFormXObject(string $contentStream, array $mediaBox, array $embeddedObjects, array $resourcesDict) | สตรีมเนื้อหาที่ถอดรหัสแล้ว media box อ็อบเจกต์ที่ฝังไว้ และดิกชันนารีทรัพยากร | เก็บเพย์โหลด form ที่นำเข้าซึ่งสมบูรณ์ในตัวเอง | ImportedFormXObject | ไม่คาดว่าจะมี | โดยทั่วไป PageImporter::import() คืนค่านี้อยู่แล้ว |
ImportedFormXObject::getWidth() | ไม่มี | คืนค่าความกว้างของ form ที่นำเข้าเป็นหน่วยพอยต์ | float | ไม่คาดว่าจะมี | ใช้เมื่อวางผลลัพธ์จาก Chrome ลงในหน้า |
ImportedFormXObject::getHeight() | ไม่มี | คืนค่าความสูงของ form ที่นำเข้าเป็นหน่วยพอยต์ | float | ไม่คาดว่าจะมี | ผลลัพธ์การเรนเดอร์แบบความสูงอัตโนมัติจะส่งผ่านค่านี้ |
ImportedFormXObject::getEmbeddedObjects() | ไม่มี | คืนค่าอ็อบเจกต์ที่ form ที่นำเข้าต้องใช้ | array | ไม่คาดว่าจะมี | โค้ดตัวเขียนใช้อ็อบเจกต์เหล่านี้เพื่อคงทรัพยากรไว้ |
ImportedFormXObject::getResourcesDict() | ไม่มี | คืนค่าดิกชันนารีทรัพยากรที่นำเข้า | array | ไม่คาดว่าจะมี | ใช้เมื่อสร้าง form XObject |
ImportedFormXObject::getMediaBox() | ไม่มี | คืนค่า media box ที่นำเข้า | array | ไม่คาดว่าจะมี | ใช้สำหรับการวินิจฉัยการวางตำแหน่ง |
ImportedFormXObject::getContentStream() | ไม่มี | คืนค่าสตรีมเนื้อหาของหน้าที่นำเข้า | string | ไม่คาดว่าจะมี | มีไว้สำหรับการผสานรวมกับ writer/import |
new PdfObject(int $objectNumber, int $generation, array $dictionary, ?string $rawStreamData = null, ?string $decodedStreamData = null, ?string $rawDictionaryBytes = null) | หมายเลขอ็อบเจกต์ เจเนอเรชัน ดิกชันนารีที่แยกวิเคราะห์แล้ว ไบต์สตรีมที่เป็นทางเลือก สตรีมที่ถอดรหัสแล้วที่เป็นทางเลือก และไบต์ดิกชันนารีดิบที่เป็นทางเลือก | เก็บสถานะของอ็อบเจกต์ที่แยกวิเคราะห์แล้ว | PdfObject | ไม่คาดว่าจะมี | สร้างโดยกลไกภายในตัวแยกวิเคราะห์ |
PdfObject::getRawDictionaryBytes() | ไม่มี | คืนค่าไบต์ดิกชันนารีต้นฉบับเมื่อมีอยู่ | `string | null` | ไม่คาดว่าจะมี |
PdfObject::getRawStreamData() | ไม่มี | คืนค่าไบต์สตรีมที่ยังไม่ถอดรหัสเมื่อมีอยู่ | `string | null` | ไม่คาดว่าจะมี |
PdfObject::getDictionary() | ไม่มี | คืนค่ารายการดิกชันนารีที่แยกวิเคราะห์แล้ว | array | ไม่คาดว่าจะมี | มุมมองตัวแยกวิเคราะห์แบบอ่านอย่างเดียว |
PdfObject::get(string $key) | คีย์ของดิกชันนารี | คืนค่า null เมื่อไม่มีคีย์นั้น | mixed | ไม่คาดว่าจะมี | ช่วยให้ผู้เรียกไม่ต้องแยกวิเคราะห์ดิกชันนารีดิบเอง |
PdfObject::getRef(string $key) | คีย์ของดิกชันนารี | คืนค่าทูเพิลการอ้างอิงอ็อบเจกต์เมื่อค่านั้นเป็นการอ้างอิง | `array | null` | ไม่คาดว่าจะมี |
PdfObject::getArray(string $key) | คีย์ของดิกชันนารี | คืนค่าอาร์เรย์ หรืออาร์เรย์ว่างเมื่อไม่มีค่า | array | ไม่คาดว่าจะมี | ตัวห่อเพื่อความสะดวกสำหรับรายการดิกชันนารีที่มีค่าเป็นอาร์เรย์ |
PdfObject::hasStream() | ไม่มี | ตรวจสอบว่ามีไบต์สตรีมอยู่หรือไม่ | bool | ไม่คาดว่าจะมี | แยกแยะอ็อบเจกต์ที่มีเฉพาะดิกชันนารี |
PdfObject::getType() | ไม่มี | อ่านคีย์ /Type ของดิกชันนารี | `string | null` | ไม่คาดว่าจะมี |
PdfObject::getSubtype() | ไม่มี | อ่านคีย์ /Subtype ของดิกชันนารี | `string | null` | ไม่คาดว่าจะมี |
RevisionExtractor::extractRevision(string $pdfData, PdfReader $reader, int $revision) | ไบต์ PDF ตัวอ่านที่แยกวิเคราะห์แล้ว และดัชนีการปรับปรุงที่เริ่มนับจากศูนย์ | สกัดการปรับปรุงแบบเพิ่มทีละส่วนหนึ่งรายการ | string | PdfParseException เมื่อขอบเขตไม่ถูกต้อง | ใช้โดยการทดสอบและการวินิจฉัยตัวแยกวิเคราะห์ |
RevisionExtractor::getRevisionBoundaries(string $pdfData, PdfReader $reader) | ไบต์ PDF และตัวอ่านที่แยกวิเคราะห์แล้ว | ค้นหาช่วงไบต์สำหรับการปรับปรุงแบบเพิ่มทีละส่วน | array | PdfParseException เมื่อโครงสร้าง xref มีรูปแบบไม่ถูกต้อง | ช่วยวิเคราะห์ PDF ที่ลงนามหรืออัปเดตแบบเพิ่มทีละส่วน |
| `StreamDecoder::decode(string $data, string | array $filter)` | ไบต์สตรีมและฟิลเตอร์ PDF หนึ่งตัวหรือมากกว่า | ใช้ฟิลเตอร์ตามลำดับ | string | PdfParseException เมื่อฟิลเตอร์ไม่รองรับหรือไม่ถูกต้อง |
new ResourceCollector(PdfReader $reader) | ตัวอ่านที่แยกวิเคราะห์แล้ว | เริ่มต้นด้วยชุดอ็อบเจกต์ที่รวบรวมไว้ที่ว่างเปล่า | ResourceCollector | ไม่คาดว่าจะมี | ใช้โดย PdfReader::collectPageResources() เป็นหลัก |
ResourceCollector::traverse(mixed $value, int $depth = 0) | ค่าที่แยกวิเคราะห์แล้วและความลึกของการเรียกซ้ำ | ไล่ตามการอ้างอิงทรัพยากรจนถึงขีดจำกัดความลึกภายใน | void | ความล้มเหลวของตัวแยกวิเคราะห์เมื่อการอ้างอิงไม่ถูกต้อง | ตัวช่วยภายในสำหรับการปิดทรัพยากรในการนำเข้าหน้า |
ResourceCollector::getCollected() | ไม่มี | คืนค่าอ็อบเจกต์ทรัพยากรที่รวบรวมไว้ | array | ไม่คาดว่าจะมี | เรียกหลังจากเรียก traverse() แล้ว |
new RevisionXRefTable(int $index, int $xrefOffset, array $xrefEntries, array $trailer, ?int $prevOffset) | ดัชนีการปรับปรุง ออฟเซ็ต xref รายการ xref trailer และออฟเซ็ตก่อนหน้าที่เป็นทางเลือก | สแนปช็อตที่เปลี่ยนแปลงไม่ได้ของการปรับปรุงแบบเพิ่มทีละส่วนหนึ่งรายการ | RevisionXRefTable | ไม่คาดว่าจะมี | สร้างโดยกลไกภายในของตัวแยกวิเคราะห์ |
RevisionXRefTable::getObjectNumbers() | ไม่มี | คืนค่าหมายเลขอ็อบเจกต์ที่ใช้งานอยู่ในตารางการปรับปรุง | array | ไม่คาดว่าจะมี | API วินิจฉัยการปรับปรุงระดับล่าง |
RevisionXRefTable::getActiveObjectCount() | ไม่มี | นับจำนวนอ็อบเจกต์ที่ใช้งานอยู่ | int | ไม่คาดว่าจะมี | มีประโยชน์สำหรับการยืนยันค่าของตัวแยกวิเคราะห์ |
RevisionXRefTable::hasRootUpdate() | ไม่มี | รายงานว่าการปรับปรุงนั้นอัปเดต root ของเอกสารหรือไม่ | bool | ไม่คาดว่าจะมี | มีประโยชน์สำหรับการวิเคราะห์การอัปเดตแบบเพิ่มทีละส่วน |
RevisionXRefTable::getSize() | ไม่มี | คืนค่าขนาดของตาราง xref | int | ไม่คาดว่าจะมี | สะท้อนเมทาดาทา xref ของ PDF ที่แยกวิเคราะห์แล้ว |
API ตัวแบ่งโทเค็นและ xref ระดับล่าง
หัวข้อที่มีชื่อว่า “API ตัวแบ่งโทเค็นและ xref ระดับล่าง”ใช้ API เหล่านี้เฉพาะสำหรับการวินิจฉัยตัวแยกวิเคราะห์เชิงลึกหรือการลดขนาด fixture เท่านั้น API เหล่านี้เปิดให้ใช้ตัววิเคราะห์คำศัพท์และกลไก cross-reference ภายใต้ PdfReader และไม่จำเป็นต่อการนำเข้าตามปกติ
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
new PdfTokenizer(string $data, int $offset = 0) | ไบต์ PDF และออฟเซ็ตเริ่มต้นที่เป็นทางเลือก | เริ่มต้นที่ออฟเซ็ตศูนย์ | PdfTokenizer | ไม่คาดว่าจะมี | ตัวแยกวิเคราะห์คำศัพท์ระดับล่าง |
PdfTokenizer::getOffset() | ไม่มี | คืนค่าออฟเซ็ตไบต์ปัจจุบัน | int | ไม่คาดว่าจะมี | ตัวช่วยวินิจฉัยสำหรับข้อผิดพลาดของตัวแยกวิเคราะห์ |
PdfTokenizer::setOffset(int $offset) | ออฟเซ็ตไบต์ | ย้ายเคอร์เซอร์ของตัวแบ่งโทเค็น | void | PdfParseException เมื่อออฟเซ็ตไม่ถูกต้อง | ใช้อย่างระมัดระวัง; ผู้เรียกเป็นเจ้าของสถานะของตัวแยกวิเคราะห์ |
PdfTokenizer::isEof() | ไม่มี | ตรวจสอบว่าเคอร์เซอร์ไปถึงจุดสิ้นสุดแล้วหรือไม่ | bool | ไม่คาดว่าจะมี | ตัวช่วยลูปของตัวแยกวิเคราะห์ระดับล่าง |
PdfTokenizer::skipWhitespace() | ไม่มี | เลื่อนผ่านช่องว่างและคอมเมนต์ของ PDF | void | ไม่คาดว่าจะมี | ใช้ก่อนอ่านโทเค็น |
PdfTokenizer::readToken() | ไม่มี | อ่านโทเค็นสเกลาร์ถัดไป | `string | int | float |
PdfTokenizer::readName() | ไม่มี | อ่านอ็อบเจกต์ name ของ PDF | string | PdfParseException เมื่อ name มีรูปแบบไม่ถูกต้อง | ถอดรหัสอักขระหลีกใน name |
PdfTokenizer::readLiteralString() | ไม่มี | อ่านสตริงแบบลิเทอรัล | string | PdfParseException เมื่อสตริงมีรูปแบบไม่ถูกต้อง | จัดการวงเล็บซ้อนและอักขระหลีก |
PdfTokenizer::readHexString() | ไม่มี | อ่านสตริงฐานสิบหก | string | PdfParseException เมื่อ hex มีรูปแบบไม่ถูกต้อง | เติมเต็ม hex ที่มีความยาวเป็นเลขคี่ตามกฎของตัวแยกวิเคราะห์ |
PdfTokenizer::readNumber() | ไม่มี | อ่านจำนวนเต็มหรือจำนวนทศนิยม | `int | float` | PdfParseException เมื่อตัวเลขไม่ถูกต้อง |
PdfTokenizer::readKeyword() | ไม่มี | อ่านคีย์เวิร์ดของ PDF | string | PdfParseException เมื่อคีย์เวิร์ดไม่ถูกต้อง | รวมศูนย์การแยกวิเคราะห์คีย์เวิร์ดไว้ในที่เดียว |
PdfTokenizer::readDictionary() | ไม่มี | อ่านดิกชันนารีของ PDF | array | PdfParseException เมื่อดิกชันนารีมีรูปแบบไม่ถูกต้อง | ใช้สำหรับอ็อบเจกต์ สตรีม และ trailer |
PdfTokenizer::readArray() | ไม่มี | อ่านอาร์เรย์ของ PDF | array | PdfParseException เมื่ออาร์เรย์มีรูปแบบไม่ถูกต้อง | ตัวช่วยสำหรับการแยกวิเคราะห์แบบเรียกซ้ำ |
PdfTokenizer::readValue() | ไม่มี | อ่านค่า PDF ที่รองรับใดก็ได้ | mixed | PdfParseException เมื่อค่ามีรูปแบบไม่ถูกต้อง | พรีมิทีฟพื้นฐานของตัวแยกวิเคราะห์ |
PdfTokenizer::readStreamData(int $length) | ความยาวของสตรีม | อ่านไบต์สตรีมตามจำนวนที่ร้องขอพอดี | string | PdfParseException เมื่อขอบเขตของสตรีมไม่ถูกต้อง | ใช้หลังจากการแก้ค่าความยาวสตรีมในดิกชันนารี |
PdfTokenizer::peek(int $length = 1) | จำนวนไบต์ | อ่านล่วงหน้าโดยไม่เลื่อนตำแหน่ง | string | ไม่คาดว่าจะมี | มีประโยชน์สำหรับการแตกแขนงของตัวแยกวิเคราะห์ |
PdfTokenizer::searchBackward(string $pattern, int $startFrom = 0) | รูปแบบและออฟเซ็ตเริ่มต้นที่เป็นทางเลือก | ค้นหาย้อนกลับจากจุดสิ้นสุดหรือจากออฟเซ็ตที่ระบุ | `int | false` | ไม่คาดว่าจะมี |
PdfTokenizer::readLine() | ไม่มี | อ่านบรรทัดหนึ่งจากออฟเซ็ตปัจจุบัน | string | ไม่คาดว่าจะมี | ตัวช่วยสแกนระดับล่าง |
CrossRefParser::parseXRefTable(string $data, int $offset) | ไบต์ PDF และออฟเซ็ตของตาราง xref | แยกวิเคราะห์รายการในตาราง cross-reference แบบดั้งเดิม | array | PdfParseException เมื่อข้อมูล xref มีรูปแบบไม่ถูกต้อง | API ตัวแยกวิเคราะห์ระดับล่าง |
CrossRefParser::parseXRefStream(string $data, int $offset) | ไบต์ PDF และออฟเซ็ตของสตรีม xref | แยกวิเคราะห์รายการในสตรีม cross-reference | array | PdfParseException เมื่อข้อมูลสตรีมมีรูปแบบไม่ถูกต้อง | รองรับสตรีม xref ของ PDF สมัยใหม่ |
แฟกทอรีที่เป็นทางเลือกและ browser pool
หัวข้อที่มีชื่อว่า “แฟกทอรีที่เป็นทางเลือกและ browser pool”EInvoiceServiceFactory แก้ค่าสัญญา e-invoice ของ Premium ที่เป็นทางเลือกแบบ lazy และคืนค่า null เมื่อไม่มีสัญญาเหล่านั้น BrowserPool จัดการวงจรชีวิตของ Chrome ที่ตัวเรนเดอร์เป็นเจ้าของ จัดการโดยตรงเฉพาะใน worker ที่ทำงานต่อเนื่องยาวนานเท่านั้น
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
EInvoiceServiceFactory::makeEmbedder() | ไม่มี | คืนค่า null เว้นแต่มีการติดตั้งการรองรับ e-invoice ของ Premium Pro | `EmbedderInterface | null` | ข้อผิดพลาดในการสร้างแพ็กเกจที่เป็นทางเลือก |
EInvoiceServiceFactory::makeValidator() | ไม่มี | คืนค่า null เว้นแต่มีการติดตั้งการรองรับการตรวจสอบของ Premium Enterprise | `ValidatorInterface | null` | ข้อผิดพลาดในการสร้างแพ็กเกจที่เป็นทางเลือก |
EInvoiceServiceFactory::makeDefaultProfile() | ไม่มี | คืนค่าโปรไฟล์ e-invoice เริ่มต้นเมื่อมีอยู่ | `ProfileInterface | null` | ข้อผิดพลาดของแพ็กเกจที่เป็นทางเลือก |
EInvoiceServiceFactory::makeSchematronRunner() | ไม่มี | คืนค่า null เว้นแต่มีการติดตั้งการรองรับ Schematron ของ Premium Enterprise | `SchematronRunnerInterface | null` | ข้อผิดพลาดในการสร้างแพ็กเกจที่เป็นทางเลือก |
new BrowserPool(ChromeRendererConfig $config, ?LoggerInterface $logger = null) | คอนฟิกของตัวเรนเดอร์และ logger ที่เป็นทางเลือก | เบราว์เซอร์จะเริ่มทำงานแบบ lazy เมื่อเรียก getBrowser() ครั้งแรก | BrowserPool | ไม่คาดว่าจะมีจนกว่าจะเริ่มต้นเบราว์เซอร์ | ตัวช่วยวงจรชีวิตที่ตัวเรนเดอร์เป็นเจ้าของ |
BrowserPool::getBrowser() | ไม่มี | เริ่มต้นหรือคืนค่าอินสแตนซ์เบราว์เซอร์ Chrome ปัจจุบัน | Browser | ข้อผิดพลาดในการเริ่มต้นเบราว์เซอร์ | ตัวช่วยวงจรชีวิตที่ตัวเรนเดอร์เป็นเจ้าของ |
BrowserPool::incrementRenderCount() | ไม่มี | เพิ่มค่าตัวนับการเรนเดอร์และหมุนเวียนเมื่อนโยบายของ pool กำหนด | void | ข้อผิดพลาดในวงจรชีวิตของเบราว์เซอร์ | ใช้โดย worker ที่ทำงานต่อเนื่องยาวนาน |
BrowserPool::close() | ไม่มี | ปิดอินสแตนซ์เบราว์เซอร์ที่จัดการอยู่ | void | ข้อผิดพลาดในการปิดเบราว์เซอร์ | เรียกใช้ระหว่างการปิด worker |
หมายเหตุสำหรับการพัฒนา
หัวข้อที่มีชื่อว่า “หมายเหตุสำหรับการพัฒนา”- ตัวเรนเดอร์ไม่ใช่ browser sandbox สำหรับ HTML ที่ไม่น่าเชื่อถือ ตรวจสอบขนาด นโยบายทรัพยากร และสิทธิ์ของผู้เรียกก่อนเรนเดอร์
- API ของตัวแยกวิเคราะห์ถูกออกแบบให้แคบโดยเจตนา ใช้ API เหล่านี้สำหรับการนำเข้าผลลัพธ์จาก Chrome ไม่ใช่สำหรับการซ่อมแซม PDF ทั่วไป
- ปิดตัวเรนเดอร์อย่างชัดแจ้งใน worker ที่ทำงานต่อเนื่องยาวนาน