ข้ามไปยังเนื้อหา

เอกสารอ้างอิง 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 จะถูกนำมาใช้เฉพาะเมื่อเป็นสตริงที่ไม่ว่างเท่านั้น

ชนิดข้อมูลเหล่านี้ใช้ดำเนินเส้นทางการเรนเดอร์ สร้าง 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 <= 0ChromeRenderResultChromeRenderException; การตรวจสอบขนาด HTML ล้มเหลวบล็อกคำขอเครือข่ายสำหรับทรัพยากรย่อยผ่าน Chrome DevTools Protocol (CDP)
ChromeHtmlRenderer::getHtmlSecurityPolicy()ไม่มีคืนค่านโยบายระดับการแยกวิเคราะห์ที่กำหนดไว้HtmlSecurityPolicyInterfaceไม่คาดว่าจะมีเสริมการควบคุมระดับการขนส่งของ Chrome
ChromeHtmlRenderer::close()ไม่มีปิด browser pool และล้างข้อมูลภายในvoidข้อผิดพลาดในการปิดเบราว์เซอร์อาจปรากฏจากไลบรารีที่อยู่เบื้องล่างเรียกใช้ระหว่างการปิด worker

ใช้ API เหล่านี้เมื่อต้องตรวจสอบและหุ้ม HTML ภายนอกก่อนเรนเดอร์ แทนการเรียก ChromeHtmlRenderer::render() โดยตรง ซึ่งเรียก API เหล่านี้อยู่แล้ว

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
ChromeSecurityPolicy::validate(string $html, int $maxSize)อินพุต HTML และขนาดไบต์สูงสุดยอมรับอินพุตก็ต่อเมื่อขนาดและโครงสร้างที่ไม่อนุญาตผ่านการตรวจสอบเท่านั้นvoidChromeRenderException หรือข้อยกเว้นของการตรวจสอบเรียกใช้ก่อนการเรนเดอร์ด้วยเบราว์เซอร์เมื่อรับ 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 ดิบที่ผลิตโดย Chromestringไม่คาดว่าจะมีใช้ร่วมกับ PdfReader และ PageImporter เมื่อทำการฝัง
ChromeRenderResult::getWidthPt()ไม่มีคืนค่าความกว้างที่ร้องขอเป็นหน่วยพอยต์floatไม่คาดว่าจะมีใช้กำหนดขนาดอ็อบเจกต์ form ที่นำเข้า
ChromeRenderResult::getHeightPt()ไม่มีคืนค่าความสูงที่คำนวณได้หรือที่ร้องขอเป็นหน่วยพอยต์floatไม่คาดว่าจะมีความสูงอัตโนมัติรวมบัฟเฟอร์สำหรับเค้าโครงการพิมพ์ไว้ด้วย
ViewportCalculator::pointsToCssPx(float $pt)pt: PDF pointแปลงค่าโดยใช้ 96 CSS px ต่อ 72 PDF pointintไม่คาดว่าจะมีปัดเศษสำหรับความกว้างวิวพอร์ตของ Chrome
ViewportCalculator::cssPxToPoints(float $px)px: CSS pixelแปลงค่าโดยใช้ 72 PDF point ต่อ 96 CSS pxfloatไม่คาดว่าจะมีใช้คำนวณความสูงอัตโนมัติ

นี่คือเส้นทางการนำเข้า แยกวิเคราะห์ไบต์ PDF ของ Chrome ด้วย PdfReader แล้วส่งตัวอ่านไปยัง PageImporter::import() เพื่อให้ได้หน้าที่ฝังได้ เมท็อด PdfReader อื่นๆรองรับการวินิจฉัย

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
new PdfReader(string $data)data: ไบต์ PDF ที่สมบูรณ์ตัวแยกวิเคราะห์จะยังไม่ทำงานจนกว่าจะเรียก parse()PdfReaderไม่คาดว่าจะมีออกแบบมาสำหรับ PDF ที่สร้างโดย Chrome
PdfReader::parse()ไม่มีแยกวิเคราะห์เชน cross-reference (xref) และ trailervoidPdfParseException เมื่อโครงสร้าง PDF ไม่ถูกต้องต้องเรียกก่อนการเข้าถึง object/page
PdfReader::getObject(int $objNum)หมายเลขอ็อบเจกต์แก้ค่าอ็อบเจกต์ที่แยกวิเคราะห์แล้วตามหมายเลขPdfObjectPdfParseException เมื่ออ็อบเจกต์ขาดหายไปหรือมีรูปแบบไม่ถูกต้องใช้หลังจากเรียก parse() แล้ว
PdfReader::getTrailer()ไม่มีคืนค่าดิกชันนารี trailer ที่แยกวิเคราะห์แล้วarrayPdfParseException เมื่อข้อมูล trailer ไม่พร้อมใช้งานใช้โดยการวินิจฉัยและการวิเคราะห์การปรับปรุง
PdfReader::getObjectNumbers()ไม่มีคืนค่าหมายเลขอ็อบเจกต์ที่แยกวิเคราะห์แล้วarrayไม่คาดว่าจะมีหลังจากการแยกวิเคราะห์มีประโยชน์สำหรับการวินิจฉัยตัวนำเข้า
PdfReader::getPage(int $pageIndex)pageIndex: ดัชนีหน้าที่เริ่มนับจากศูนย์ไม่มีการแยกวิเคราะห์โดยอัตโนมัติPdfObjectPdfParseException เมื่อขาดหายไปหรืออยู่นอกช่วงตัวนำเข้าใช้ค่าเริ่มต้นเป็นหน้า 0 เสมอ
PdfReader::getPageContentStream(PdfObject $page)page: อ็อบเจกต์หน้าที่แยกวิเคราะห์แล้วแก้ค่าสตรีมเนื้อหาstringPdfParseException เมื่อสตรีมไม่ถูกต้องสตรีมที่ว่างเปล่าทำให้ตัวนำเข้าล้มเหลว
PdfReader::getPageResources(PdfObject $page)page: อ็อบเจกต์หน้าที่แยกวิเคราะห์แล้วแก้ค่าทรัพยากรของหน้าarrayPdfParseException เมื่อทรัพยากรไม่ถูกต้องดิกชันนารีทรัพยากรถูกฝังไปพร้อมกับอ็อบเจกต์ form
PdfReader::getPageMediaBox(PdfObject $page)page: อ็อบเจกต์หน้าที่แยกวิเคราะห์แล้วถอยกลับไปใช้ขนาดคล้าย A4 เมื่อไม่มีค่าarrayความล้มเหลวของตัวแยกวิเคราะห์คืนค่าพิกัดในปริภูมิ PDF
PdfReader::resolveRef(mixed $value)ค่าที่แยกวิเคราะห์แล้วแก้ค่าการอ้างอิงอ็อบเจกต์แบบเรียกซ้ำในกรณีที่ทำได้mixedPdfParseException เมื่อการอ้างอิงไม่ถูกต้องตัวช่วยลักษณะภายในที่เปิดให้ใช้สำหรับเวิร์กโฟลว์ของตัวนำเข้า
PdfReader::collectPageResources(PdfObject $page)page: อ็อบเจกต์หน้าที่แยกวิเคราะห์แล้วท่องไปตามการอ้างอิงทรัพยากรของหน้าarrayความล้มเหลวของตัวแยกวิเคราะห์ใช้ฝังอ็อบเจกต์ที่ขึ้นต่อกันไปพร้อมกับหน้าที่นำเข้า
PdfReader::getRevisionCount()ไม่มีนับจำนวนการปรับปรุงแบบเพิ่มทีละส่วนที่แยกวิเคราะห์แล้วintไม่คาดว่าจะมีหลังจากการแยกวิเคราะห์มีประโยชน์สำหรับ PDF ที่ลงนามหรืออัปเดตแบบเพิ่มทีละส่วน
PdfReader::getRevisionXRef(int $index)ดัชนีการปรับปรุงที่เริ่มนับจากศูนย์คืนค่าตาราง xref ของการปรับปรุงหนึ่งรายการRevisionXRefTablePdfParseException เมื่อดัชนีไม่ถูกต้องใช้สำหรับการวินิจฉัยการปรับปรุงระดับล่าง
PdfReader::getRevisions()ไม่มีคืนค่าตาราง xref ของการปรับปรุงทั้งหมดที่แยกวิเคราะห์แล้วarrayไม่คาดว่าจะมีหลังจากการแยกวิเคราะห์มุมมองสถานะตัวแยกวิเคราะห์แบบอ่านอย่างเดียว
PageImporter::import(PdfReader $reader, int $pageIndex = 0)ตัวอ่านที่แยกวิเคราะห์แล้วและดัชนีหน้าที่เริ่มนับจากศูนย์นำเข้าหน้าแรกเมื่อไม่ได้ระบุImportedFormXObjectPdfParseException เมื่อไม่สามารถสกัดหน้าออกมาได้รวบรวมสตรีมเนื้อหา 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()ไม่มีคืนค่าไบต์ดิกชันนารีต้นฉบับเมื่อมีอยู่`stringnull`ไม่คาดว่าจะมี
PdfObject::getRawStreamData()ไม่มีคืนค่าไบต์สตรีมที่ยังไม่ถอดรหัสเมื่อมีอยู่`stringnull`ไม่คาดว่าจะมี
PdfObject::getDictionary()ไม่มีคืนค่ารายการดิกชันนารีที่แยกวิเคราะห์แล้วarrayไม่คาดว่าจะมีมุมมองตัวแยกวิเคราะห์แบบอ่านอย่างเดียว
PdfObject::get(string $key)คีย์ของดิกชันนารีคืนค่า null เมื่อไม่มีคีย์นั้นmixedไม่คาดว่าจะมีช่วยให้ผู้เรียกไม่ต้องแยกวิเคราะห์ดิกชันนารีดิบเอง
PdfObject::getRef(string $key)คีย์ของดิกชันนารีคืนค่าทูเพิลการอ้างอิงอ็อบเจกต์เมื่อค่านั้นเป็นการอ้างอิง`arraynull`ไม่คาดว่าจะมี
PdfObject::getArray(string $key)คีย์ของดิกชันนารีคืนค่าอาร์เรย์ หรืออาร์เรย์ว่างเมื่อไม่มีค่าarrayไม่คาดว่าจะมีตัวห่อเพื่อความสะดวกสำหรับรายการดิกชันนารีที่มีค่าเป็นอาร์เรย์
PdfObject::hasStream()ไม่มีตรวจสอบว่ามีไบต์สตรีมอยู่หรือไม่boolไม่คาดว่าจะมีแยกแยะอ็อบเจกต์ที่มีเฉพาะดิกชันนารี
PdfObject::getType()ไม่มีอ่านคีย์ /Type ของดิกชันนารี`stringnull`ไม่คาดว่าจะมี
PdfObject::getSubtype()ไม่มีอ่านคีย์ /Subtype ของดิกชันนารี`stringnull`ไม่คาดว่าจะมี
RevisionExtractor::extractRevision(string $pdfData, PdfReader $reader, int $revision)ไบต์ PDF ตัวอ่านที่แยกวิเคราะห์แล้ว และดัชนีการปรับปรุงที่เริ่มนับจากศูนย์สกัดการปรับปรุงแบบเพิ่มทีละส่วนหนึ่งรายการstringPdfParseException เมื่อขอบเขตไม่ถูกต้องใช้โดยการทดสอบและการวินิจฉัยตัวแยกวิเคราะห์
RevisionExtractor::getRevisionBoundaries(string $pdfData, PdfReader $reader)ไบต์ PDF และตัวอ่านที่แยกวิเคราะห์แล้วค้นหาช่วงไบต์สำหรับการปรับปรุงแบบเพิ่มทีละส่วนarrayPdfParseException เมื่อโครงสร้าง xref มีรูปแบบไม่ถูกต้องช่วยวิเคราะห์ PDF ที่ลงนามหรืออัปเดตแบบเพิ่มทีละส่วน
`StreamDecoder::decode(string $data, stringarray $filter)`ไบต์สตรีมและฟิลเตอร์ PDF หนึ่งตัวหรือมากกว่าใช้ฟิลเตอร์ตามลำดับstringPdfParseException เมื่อฟิลเตอร์ไม่รองรับหรือไม่ถูกต้อง
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()ไม่มีคืนค่าขนาดของตาราง xrefintไม่คาดว่าจะมีสะท้อนเมทาดาทา xref ของ PDF ที่แยกวิเคราะห์แล้ว

ใช้ API เหล่านี้เฉพาะสำหรับการวินิจฉัยตัวแยกวิเคราะห์เชิงลึกหรือการลดขนาด fixture เท่านั้น API เหล่านี้เปิดให้ใช้ตัววิเคราะห์คำศัพท์และกลไก cross-reference ภายใต้ PdfReader และไม่จำเป็นต่อการนำเข้าตามปกติ

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
new PdfTokenizer(string $data, int $offset = 0)ไบต์ PDF และออฟเซ็ตเริ่มต้นที่เป็นทางเลือกเริ่มต้นที่ออฟเซ็ตศูนย์PdfTokenizerไม่คาดว่าจะมีตัวแยกวิเคราะห์คำศัพท์ระดับล่าง
PdfTokenizer::getOffset()ไม่มีคืนค่าออฟเซ็ตไบต์ปัจจุบันintไม่คาดว่าจะมีตัวช่วยวินิจฉัยสำหรับข้อผิดพลาดของตัวแยกวิเคราะห์
PdfTokenizer::setOffset(int $offset)ออฟเซ็ตไบต์ย้ายเคอร์เซอร์ของตัวแบ่งโทเค็นvoidPdfParseException เมื่อออฟเซ็ตไม่ถูกต้องใช้อย่างระมัดระวัง; ผู้เรียกเป็นเจ้าของสถานะของตัวแยกวิเคราะห์
PdfTokenizer::isEof()ไม่มีตรวจสอบว่าเคอร์เซอร์ไปถึงจุดสิ้นสุดแล้วหรือไม่boolไม่คาดว่าจะมีตัวช่วยลูปของตัวแยกวิเคราะห์ระดับล่าง
PdfTokenizer::skipWhitespace()ไม่มีเลื่อนผ่านช่องว่างและคอมเมนต์ของ PDFvoidไม่คาดว่าจะมีใช้ก่อนอ่านโทเค็น
PdfTokenizer::readToken()ไม่มีอ่านโทเค็นสเกลาร์ถัดไป`stringintfloat
PdfTokenizer::readName()ไม่มีอ่านอ็อบเจกต์ name ของ PDFstringPdfParseException เมื่อ name มีรูปแบบไม่ถูกต้องถอดรหัสอักขระหลีกใน name
PdfTokenizer::readLiteralString()ไม่มีอ่านสตริงแบบลิเทอรัลstringPdfParseException เมื่อสตริงมีรูปแบบไม่ถูกต้องจัดการวงเล็บซ้อนและอักขระหลีก
PdfTokenizer::readHexString()ไม่มีอ่านสตริงฐานสิบหกstringPdfParseException เมื่อ hex มีรูปแบบไม่ถูกต้องเติมเต็ม hex ที่มีความยาวเป็นเลขคี่ตามกฎของตัวแยกวิเคราะห์
PdfTokenizer::readNumber()ไม่มีอ่านจำนวนเต็มหรือจำนวนทศนิยม`intfloat`PdfParseException เมื่อตัวเลขไม่ถูกต้อง
PdfTokenizer::readKeyword()ไม่มีอ่านคีย์เวิร์ดของ PDFstringPdfParseException เมื่อคีย์เวิร์ดไม่ถูกต้องรวมศูนย์การแยกวิเคราะห์คีย์เวิร์ดไว้ในที่เดียว
PdfTokenizer::readDictionary()ไม่มีอ่านดิกชันนารีของ PDFarrayPdfParseException เมื่อดิกชันนารีมีรูปแบบไม่ถูกต้องใช้สำหรับอ็อบเจกต์ สตรีม และ trailer
PdfTokenizer::readArray()ไม่มีอ่านอาร์เรย์ของ PDFarrayPdfParseException เมื่ออาร์เรย์มีรูปแบบไม่ถูกต้องตัวช่วยสำหรับการแยกวิเคราะห์แบบเรียกซ้ำ
PdfTokenizer::readValue()ไม่มีอ่านค่า PDF ที่รองรับใดก็ได้mixedPdfParseException เมื่อค่ามีรูปแบบไม่ถูกต้องพรีมิทีฟพื้นฐานของตัวแยกวิเคราะห์
PdfTokenizer::readStreamData(int $length)ความยาวของสตรีมอ่านไบต์สตรีมตามจำนวนที่ร้องขอพอดีstringPdfParseException เมื่อขอบเขตของสตรีมไม่ถูกต้องใช้หลังจากการแก้ค่าความยาวสตรีมในดิกชันนารี
PdfTokenizer::peek(int $length = 1)จำนวนไบต์อ่านล่วงหน้าโดยไม่เลื่อนตำแหน่งstringไม่คาดว่าจะมีมีประโยชน์สำหรับการแตกแขนงของตัวแยกวิเคราะห์
PdfTokenizer::searchBackward(string $pattern, int $startFrom = 0)รูปแบบและออฟเซ็ตเริ่มต้นที่เป็นทางเลือกค้นหาย้อนกลับจากจุดสิ้นสุดหรือจากออฟเซ็ตที่ระบุ`intfalse`ไม่คาดว่าจะมี
PdfTokenizer::readLine()ไม่มีอ่านบรรทัดหนึ่งจากออฟเซ็ตปัจจุบันstringไม่คาดว่าจะมีตัวช่วยสแกนระดับล่าง
CrossRefParser::parseXRefTable(string $data, int $offset)ไบต์ PDF และออฟเซ็ตของตาราง xrefแยกวิเคราะห์รายการในตาราง cross-reference แบบดั้งเดิมarrayPdfParseException เมื่อข้อมูล xref มีรูปแบบไม่ถูกต้องAPI ตัวแยกวิเคราะห์ระดับล่าง
CrossRefParser::parseXRefStream(string $data, int $offset)ไบต์ PDF และออฟเซ็ตของสตรีม xrefแยกวิเคราะห์รายการในสตรีม cross-referencearrayPdfParseException เมื่อข้อมูลสตรีมมีรูปแบบไม่ถูกต้องรองรับสตรีม xref ของ PDF สมัยใหม่

EInvoiceServiceFactory แก้ค่าสัญญา e-invoice ของ Premium ที่เป็นทางเลือกแบบ lazy และคืนค่า null เมื่อไม่มีสัญญาเหล่านั้น BrowserPool จัดการวงจรชีวิตของ Chrome ที่ตัวเรนเดอร์เป็นเจ้าของ จัดการโดยตรงเฉพาะใน worker ที่ทำงานต่อเนื่องยาวนานเท่านั้น

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
EInvoiceServiceFactory::makeEmbedder()ไม่มีคืนค่า null เว้นแต่มีการติดตั้งการรองรับ e-invoice ของ Premium Pro`EmbedderInterfacenull`ข้อผิดพลาดในการสร้างแพ็กเกจที่เป็นทางเลือก
EInvoiceServiceFactory::makeValidator()ไม่มีคืนค่า null เว้นแต่มีการติดตั้งการรองรับการตรวจสอบของ Premium Enterprise`ValidatorInterfacenull`ข้อผิดพลาดในการสร้างแพ็กเกจที่เป็นทางเลือก
EInvoiceServiceFactory::makeDefaultProfile()ไม่มีคืนค่าโปรไฟล์ e-invoice เริ่มต้นเมื่อมีอยู่`ProfileInterfacenull`ข้อผิดพลาดของแพ็กเกจที่เป็นทางเลือก
EInvoiceServiceFactory::makeSchematronRunner()ไม่มีคืนค่า null เว้นแต่มีการติดตั้งการรองรับ Schematron ของ Premium Enterprise`SchematronRunnerInterfacenull`ข้อผิดพลาดในการสร้างแพ็กเกจที่เป็นทางเลือก
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 ที่ทำงานต่อเนื่องยาวนาน