Bỏ qua để đến nội dung

Tham khảo API Artisan

Gói Artisan (nextpdf/artisan) cung cấp hai nhóm API liên quan. Lớp kết xuất Chrome — ChromeRendererConfig, ChromeHtmlRenderer, ChromeSecurityPolicy, ChromeRenderResult, ViewportCalculatorBrowserPool — chuyển một đoạn Hypertext Markup Language (HTML) thành tệp Portable Document Format (PDF) do Chrome tạo ra. Lớp trình phân tích cú pháp và trình nhập — PdfReader, PageImporter, ImportedFormXObject, cùng các lớp tokenizer và cross-reference hỗ trợ — nhúng kết quả kết xuất đó trở lại vào tài liệu NextPDF dưới dạng Form XObject có văn bản chọn được.

Bắt đầu từ đây: nếu bạn chỉ cần tạo một tệp PDF từ HTML, bạn hiếm khi phải dùng trực tiếp gói này. Hãy gắn một ChromeRendererConfig vào một Document của NextPDF rồi gọi writeHtmlChrome(); xem phần bắt đầu nhanh. Dùng các lớp bên dưới khi bạn nhúng bộ kết xuất vào worker hoặc chạy chẩn đoán trình phân tích cú pháp. Ví dụ đầu tiên trong phần Tác vụ thường gặp cho thấy cách thực hiện chỉ với một lệnh gọi.

Ba luồng bên dưới bao quát gần như mọi trường hợp dùng trong môi trường thực tế, từ lệnh gọi cấp cao nhất đến quy trình kết xuất và nhập tường minh. Mỗi mẫu đều đã được kiểm chứng với nextpdf-Artisan/src (và các tệp README.md / ci/tests/ của gói).

Kết xuất một đoạn HTML thành tệp PDF có văn bản chọn được bằng lệnh gọi chuẩn.

<?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');

Tác dụng: Chrome dàn trang cho đoạn HTML. Cầu nối nhúng trang 0 dưới dạng Form XObject, nhờ đó văn bản vẫn chọn được. writeHtmlChrome(string $html, ?float $width = null, ?float $height = null): static tự khớp chiều cao khi $heightnull.

Tự chạy bộ kết xuất và nhập trang khi bạn cần quy trình tường minh phía sau writeHtmlChrome(), chẳng hạn trong worker hoặc các luồng đặt nội dung tùy chỉnh.

<?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();
}

Tác dụng: kết xuất các byte PDF của Chrome, phân tích cú pháp chúng và nhập trang 0 vào một ImportedFormXObject mà bạn có thể đặt vào tài liệu. Luôn gọi close() trên bộ kết xuất để giải phóng tiến trình Chrome.

Tạo cấu hình từ một mảng kiểu framework cho config/*.php hoặc các tham số gói, thay vì viết cứng các đối số của hàm khởi tạo.

<?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,
]);

Tác dụng: ánh xạ mảng cấu hình kiểu snake-case sang hàm khởi tạo. Các khóa không được đặt sẽ dùng giá trị mặc định, và chrome_binary chỉ được áp dụng khi đó là một chuỗi không rỗng.

Các kiểu này vận hành đường dẫn kết xuất. Tạo một ChromeRendererConfig, truyền nó vào một ChromeHtmlRenderer, rồi gọi render() để nhận một ChromeRenderResult.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém ngoại lệ hoặc thất bại vớiGhi chú
new ChromeRendererConfig(?string $chromeBinaryPath = null, int $renderTimeout = 30, string $defaultCss = '', int $maxHtmlSize = 5000000, bool $noSandbox = false)Đường dẫn tệp nhị phân, thời gian chờ, Cascading Style Sheets (CSS), giới hạn kích thước HTML, cờ sandbox.Tự động phát hiện Chrome khi đường dẫn tệp nhị phân là null; sandbox vẫn bật trừ khi bị tắt.ChromeRendererConfigkhông có.Chỉ đặt noSandbox khi môi trường chạy yêu cầu.
ChromeRendererConfig::fromArray(array $config)chrome_binary, render_timeout, default_css, max_html_size, no_sandbox.Các giá trị bị thiếu sẽ dùng giá trị mặc định của hàm khởi tạo.ChromeRendererConfigKhi kiểu không khớp, các khóa tùy chọn sẽ quay về giá trị mặc định.Phù hợp với các mảng cấu hình kiểu framework.
new ChromeHtmlRenderer(ChromeRendererConfig $config, ?LoggerInterface $logger = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null)Cấu hình, logger tùy chọn, chính sách HTML tùy chọn ở lớp phân tích cú pháp.Dùng DefaultHtmlSecurityPolicy khi không cung cấp chính sách nào.ChromeHtmlRendererLỗi thiết lập Chrome xảy ra ở lần kết xuất đầu tiên.Bộ kết xuất sở hữu một browser pool cho đến khi gọi close().
ChromeHtmlRenderer::render(string $html, float $widthPt, float $heightPt = 0)html: đoạn đầu vào; widthPt: chiều rộng trang; heightPt: chiều cao đích hoặc tự động.Tự động tính chiều cao nội dung khi heightPt <= 0.ChromeRenderResultChromeRenderException; lỗi kiểm tra kích thước HTML.Chặn các yêu cầu mạng tới tài nguyên con thông qua Chrome DevTools Protocol (CDP).
ChromeHtmlRenderer::getHtmlSecurityPolicy()không có.Trả về chính sách lớp phân tích cú pháp đã cấu hình.HtmlSecurityPolicyInterfacekhông có.Bổ sung cho các kiểm soát ở mức truyền tải của Chrome.
ChromeHtmlRenderer::close()không có.Đóng browser pool và xóa nó.voidLỗi tắt trình duyệt có thể phát sinh từ thư viện bên dưới.Gọi khi tắt worker.

Hãy dùng các API này khi bạn cần kiểm tra và bao bọc HTML bên ngoài trước khi kết xuất, thay vì gọi trực tiếp ChromeHtmlRenderer::render(), vì phương thức đó đã gọi chúng.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém ngoại lệ hoặc thất bại vớiGhi chú
ChromeSecurityPolicy::validate(string $html, int $maxSize)Đầu vào HTML và kích thước byte tối đa.Chỉ chấp nhận đầu vào khi kích thước và các cấu trúc bị cấm vượt qua khâu kiểm tra.voidChromeRenderException hoặc ngoại lệ kiểm tra.Chạy trước khi trình duyệt kết xuất nếu chấp nhận HTML bên ngoài.
ChromeSecurityPolicy::wrapHtml(string $html, int $viewportWidth, string $defaultCss = '')Đoạn HTML, chiều rộng viewport, CSS mặc định tùy chọn.Tạo một tài liệu kết xuất hoàn chỉnh bao quanh đoạn HTML.stringLỗi kiểm tra hoặc lỗi dựng chuỗi.Giữ CSS riêng của bộ kết xuất tách biệt với HTML của ứng dụng.

Trình trợ giúp kết quả và chuyển đổi

Phần tiêu đề “Trình trợ giúp kết quả và chuyển đổi”

Hãy dùng các trình trợ giúp này để đọc kết quả kết xuất (ChromeRenderResult) và chuyển đổi giữa điểm PDF với pixel CSS của Chrome khi xác định kích thước viewport hoặc tính chiều cao.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém ngoại lệ hoặc thất bại vớiGhi chú
new ChromeRenderResult(string $pdfData, float $widthPt, float $heightPt, float $contentHeightCssPx)Các byte PDF thô, chiều rộng, chiều cao, chiều cao nội dung đo được.Không kiểm tra thêm ngoài các thuộc tính hàm khởi tạo đã định kiểu.ChromeRenderResultkhông có.Thường được trả về bởi ChromeHtmlRenderer::render().
ChromeRenderResult::getPdfData()không có.Trả về các byte PDF thô do Chrome tạo ra.stringkhông có.Dùng với PdfReaderPageImporter khi nhúng.
ChromeRenderResult::getWidthPt()không có.Trả về chiều rộng được yêu cầu, tính bằng điểm.floatkhông có.Dùng để xác định kích thước cho đối tượng form đã nhập.
ChromeRenderResult::getHeightPt()không có.Trả về chiều cao đã tính hoặc được yêu cầu, tính bằng điểm.floatkhông có.Chiều cao tự động bao gồm vùng đệm cho bố cục in.
ViewportCalculator::pointsToCssPx(float $pt)pt: điểm PDF.Chuyển đổi theo tỷ lệ 96 px CSS trên 72 điểm PDF.intkhông có.Được làm tròn cho chiều rộng viewport của Chrome.
ViewportCalculator::cssPxToPoints(float $px)px: pixel CSS.Chuyển đổi theo tỷ lệ 72 điểm PDF trên 96 px CSS.floatkhông có.Dùng để tính chiều cao tự động.

Đây là đường dẫn nhập. Phân tích cú pháp các byte PDF của Chrome bằng PdfReader, rồi truyền reader vào PageImporter::import() để nhận một trang có thể nhúng; các phương thức PdfReader còn lại dùng cho chẩn đoán.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém ngoại lệ hoặc thất bại vớiGhi chú
new PdfReader(string $data)data: các byte PDF hoàn chỉnh.Trình phân tích cú pháp không chạy cho đến khi gọi parse().PdfReaderkhông có.Được thiết kế cho các tệp PDF do Chrome tạo ra.
PdfReader::parse()không có.Phân tích cú pháp chuỗi cross-reference (xref) và trailer.voidPdfParseException khi cấu trúc PDF không hợp lệ.Phải được gọi trước khi truy cập object/page.
PdfReader::getObject(int $objNum)Số hiệu đối tượng.Phân giải đối tượng đã phân tích theo số hiệu.PdfObjectPdfParseException khi đối tượng bị thiếu hoặc sai định dạng.Dùng sau parse().
PdfReader::getTrailer()không có.Trả về dictionary trailer đã phân tích.arrayPdfParseException khi không có dữ liệu trailer.Được dùng cho chẩn đoán và phân tích revision.
PdfReader::getObjectNumbers()không có.Trả về các số hiệu đối tượng đã phân tích.arraykhông có sau khi phân tích cú pháp.Hữu ích cho việc chẩn đoán trình nhập.
PdfReader::getPage(int $pageIndex)pageIndex: chỉ số trang bắt đầu từ 0.Không tự động phân tích cú pháp.PdfObjectPdfParseException khi thiếu hoặc nằm ngoài phạm vi.Trình nhập mặc định lấy trang 0.
PdfReader::getPageContentStream(PdfObject $page)page: đối tượng trang đã phân tích.Phân giải luồng nội dung.stringPdfParseException khi luồng không hợp lệ.Luồng rỗng khiến trình nhập thất bại.
PdfReader::getPageResources(PdfObject $page)page: đối tượng trang đã phân tích.Phân giải tài nguyên trang.arrayPdfParseException khi tài nguyên không hợp lệ.Dictionary tài nguyên được nhúng cùng với đối tượng form.
PdfReader::getPageMediaBox(PdfObject $page)page: đối tượng trang đã phân tích.Quay về kích thước tương tự A4 khi không có giá trị.arrayLỗi của trình phân tích cú pháp.Trả về tọa độ trong không gian PDF.
PdfReader::resolveRef(mixed $value)Giá trị đã phân tích.Phân giải các tham chiếu đối tượng theo cách đệ quy khi thích hợp.mixedPdfParseException khi tham chiếu không hợp lệ.Trình trợ giúp kiểu nội bộ được mở ra cho các quy trình của trình nhập.
PdfReader::collectPageResources(PdfObject $page)page: đối tượng trang đã phân tích.Duyệt qua các tham chiếu tài nguyên của trang.arrayLỗi của trình phân tích cú pháp.Dùng để nhúng các đối tượng phụ thuộc cùng với các trang đã nhập.
PdfReader::getRevisionCount()không có.Đếm số revision tăng dần đã phân tích.intkhông có sau khi phân tích cú pháp.Hữu ích cho các tệp PDF đã ký hoặc được cập nhật tăng dần.
PdfReader::getRevisionXRef(int $index)Chỉ số revision bắt đầu từ 0.Trả về một bảng xref revision.RevisionXRefTablePdfParseException khi chỉ số không hợp lệ.Dùng cho việc chẩn đoán revision ở mức thấp.
PdfReader::getRevisions()không có.Trả về tất cả các bảng xref revision đã phân tích.arraykhông có sau khi phân tích cú pháp.Khung nhìn chỉ đọc về trạng thái trình phân tích cú pháp.
PageImporter::import(PdfReader $reader, int $pageIndex = 0)Reader đã phân tích và chỉ số trang bắt đầu từ 0.Nhập trang đầu tiên khi bỏ qua tham số.ImportedFormXObjectPdfParseException khi không thể trích xuất trang.Thu thập luồng nội dung, media box, tài nguyên và các đối tượng được tham chiếu.

Các đối tượng hỗ trợ trình phân tích cú pháp

Phần tiêu đề “Các đối tượng hỗ trợ trình phân tích cú pháp”

Các value object và trình trợ giúp này được trình phân tích cú pháp trả về hoặc dùng nội bộ. Hãy dùng chúng khi bạn kiểm tra các đối tượng, tài nguyên, luồng hoặc bảng revision đã nhập.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém ngoại lệ hoặc thất bại vớiGhi chú
new ImportedFormXObject(string $contentStream, array $mediaBox, array $embeddedObjects, array $resourcesDict)Luồng nội dung đã giải mã, media box, các đối tượng được nhúng, dictionary tài nguyên.Lưu trữ payload form đã nhập, độc lập và khép kín.ImportedFormXObjectkhông có.Thường được trả về bởi PageImporter::import().
ImportedFormXObject::getWidth()không có.Trả về chiều rộng của form đã nhập, tính bằng điểm.floatkhông có.Dùng khi đặt kết quả của Chrome vào một trang.
ImportedFormXObject::getHeight()không có.Trả về chiều cao của form đã nhập, tính bằng điểm.floatkhông có.Các kết quả kết xuất với chiều cao tự động được truyền qua giá trị này.
ImportedFormXObject::getEmbeddedObjects()không có.Trả về các đối tượng mà form đã nhập cần đến.arraykhông có.Mã writer dùng các đối tượng này để giữ lại tài nguyên.
ImportedFormXObject::getResourcesDict()không có.Trả về dictionary tài nguyên đã nhập.arraykhông có.Dùng khi dựng form XObject.
ImportedFormXObject::getMediaBox()không có.Trả về media box đã nhập.arraykhông có.Dùng để chẩn đoán việc đặt nội dung.
ImportedFormXObject::getContentStream()không có.Trả về luồng nội dung của trang đã nhập.stringkhông có.Dành cho việc tích hợp writer/import.
new PdfObject(int $objectNumber, int $generation, array $dictionary, ?string $rawStreamData = null, ?string $decodedStreamData = null, ?string $rawDictionaryBytes = null)Số hiệu đối tượng, generation, dictionary đã phân tích, các byte luồng tùy chọn, luồng đã giải mã tùy chọn, các byte dictionary thô tùy chọn.Lưu trữ trạng thái đối tượng đã phân tích.PdfObjectkhông có.Được tạo bởi các thành phần nội bộ của trình phân tích cú pháp.
PdfObject::getRawDictionaryBytes()không có.Trả về các byte dictionary gốc khi có sẵn.`stringnull`không có.
PdfObject::getRawStreamData()không có.Trả về các byte luồng chưa giải mã khi có sẵn.`stringnull`không có.
PdfObject::getDictionary()không có.Trả về các mục dictionary đã phân tích.arraykhông có.Khung nhìn chỉ đọc của trình phân tích cú pháp.
PdfObject::get(string $key)Khóa của dictionary.Trả về null khi không có khóa.mixedkhông có.Giúp bên gọi không phải tự phân tích các dictionary thô.
PdfObject::getRef(string $key)Khóa của dictionary.Trả về tuple tham chiếu đối tượng khi giá trị là một tham chiếu.`arraynull`không có.
PdfObject::getArray(string $key)Khóa của dictionary.Trả về một giá trị mảng hoặc mảng rỗng khi không có sẵn.arraykhông có.Lớp bao tiện lợi cho các mục dictionary có giá trị là mảng.
PdfObject::hasStream()không có.Kiểm tra xem các byte luồng có hiện diện hay không.boolkhông có.Phân biệt các đối tượng chỉ có dictionary.
PdfObject::getType()không có.Đọc /Type.`stringnull`không có.
PdfObject::getSubtype()không có.Đọc /Subtype.`stringnull`không có.
RevisionExtractor::extractRevision(string $pdfData, PdfReader $reader, int $revision)Các byte PDF, một reader đã phân tích, và chỉ số revision bắt đầu từ 0.Trích xuất một revision tăng dần.stringPdfParseException khi ranh giới không hợp lệ.Được dùng cho kiểm thử và chẩn đoán trình phân tích cú pháp.
RevisionExtractor::getRevisionBoundaries(string $pdfData, PdfReader $reader)Các byte PDF và một reader đã phân tích.Tìm ra các dải byte cho các revision tăng dần.arrayPdfParseException khi cấu trúc xref sai định dạng.Giúp phân tích các tệp PDF đã ký hoặc được cập nhật tăng dần.
`StreamDecoder::decode(string $data, stringarray $filter)`Các byte luồng và một hoặc nhiều bộ lọc PDF.Áp dụng các bộ lọc theo thứ tự.stringPdfParseException khi bộ lọc không được hỗ trợ hoặc không hợp lệ.
new ResourceCollector(PdfReader $reader)Reader đã phân tích.Bắt đầu với tập đối tượng được thu thập rỗng.ResourceCollectorkhông có.Được dùng bởi PdfReader::collectPageResources().
ResourceCollector::traverse(mixed $value, int $depth = 0)Giá trị đã phân tích và độ sâu đệ quy.Duyệt qua các tham chiếu tài nguyên cho đến các giới hạn độ sâu nội bộ.voidLỗi của trình phân tích cú pháp khi tham chiếu không hợp lệ.Trình trợ giúp nội bộ để khép kín tài nguyên khi nhập trang.
ResourceCollector::getCollected()không có.Trả về các đối tượng tài nguyên đã thu thập.arraykhông có.Gọi sau traverse().
new RevisionXRefTable(int $index, int $xrefOffset, array $xrefEntries, array $trailer, ?int $prevOffset)Chỉ số revision, offset của xref, các mục xref, trailer, offset trước đó tùy chọn.Ảnh chụp bất biến của một revision tăng dần.RevisionXRefTablekhông có.Được tạo bởi các thành phần nội bộ của trình phân tích cú pháp.
RevisionXRefTable::getObjectNumbers()không có.Trả về các số hiệu đối tượng đang hoạt động trong bảng revision.arraykhông có.API chẩn đoán revision ở mức thấp.
RevisionXRefTable::getActiveObjectCount()không có.Đếm các đối tượng đang hoạt động.intkhông có.Hữu ích cho các phép khẳng định của trình phân tích cú pháp.
RevisionXRefTable::hasRootUpdate()không có.Báo cáo xem revision có cập nhật root của tài liệu hay không.boolkhông có.Hữu ích cho việc phân tích cập nhật tăng dần.
RevisionXRefTable::getSize()không có.Trả về giá trị kích thước của bảng xref.intkhông có.Phản ánh siêu dữ liệu xref của PDF đã phân tích.

Chỉ dùng các API này cho chẩn đoán sâu trình phân tích cú pháp hoặc thu gọn fixture. Chúng mở ra bộ máy lexer và cross-reference bên dưới PdfReader và không cần thiết cho quy trình nhập thông thường.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém ngoại lệ hoặc thất bại vớiGhi chú
new PdfTokenizer(string $data, int $offset = 0)Các byte PDF và offset ban đầu tùy chọn.Bắt đầu tại offset 0.PdfTokenizerkhông có.Trình phân tích từ vựng mức thấp.
PdfTokenizer::getOffset()không có.Trả về offset byte hiện tại.intkhông có.Trình trợ giúp chẩn đoán cho các lỗi của trình phân tích cú pháp.
PdfTokenizer::setOffset(int $offset)Offset byte.Di chuyển con trỏ của tokenizer.voidPdfParseException khi offset không hợp lệ.Dùng cẩn thận; bên gọi sở hữu trạng thái của trình phân tích cú pháp.
PdfTokenizer::isEof()không có.Kiểm tra xem con trỏ đã đến cuối hay chưa.boolkhông có.Trình trợ giúp vòng lặp của trình phân tích cú pháp mức thấp.
PdfTokenizer::skipWhitespace()không có.Bỏ qua khoảng trắng và chú thích của PDF.voidkhông có.Dùng trước khi đọc token.
PdfTokenizer::readToken()không có.Đọc token vô hướng tiếp theo.`stringintfloat
PdfTokenizer::readName()không có.Đọc một đối tượng name của PDF.stringPdfParseException khi name sai định dạng.Giải mã các ký tự escape trong name.
PdfTokenizer::readLiteralString()không có.Đọc một chuỗi literal.stringPdfParseException khi chuỗi sai định dạng.Xử lý các dấu ngoặc đơn lồng nhau và các ký tự escape.
PdfTokenizer::readHexString()không có.Đọc một chuỗi thập lục phân.stringPdfParseException khi chuỗi hex sai định dạng.Đệm thêm cho chuỗi hex có độ dài lẻ theo quy tắc của trình phân tích cú pháp.
PdfTokenizer::readNumber()không có.Đọc một số nguyên hoặc số thực.`intfloat`PdfParseException khi số không hợp lệ.
PdfTokenizer::readKeyword()không có.Đọc một keyword của PDF.stringPdfParseException khi keyword không hợp lệ.Giữ việc phân tích keyword được tập trung một chỗ.
PdfTokenizer::readDictionary()không có.Đọc một dictionary của PDF.arrayPdfParseException khi dictionary sai định dạng.Được dùng cho các object, luồng và trailer.
PdfTokenizer::readArray()không có.Đọc một array của PDF.arrayPdfParseException khi array sai định dạng.Trình trợ giúp phân tích cú pháp đệ quy.
PdfTokenizer::readValue()không có.Đọc bất kỳ giá trị PDF nào được hỗ trợ.mixedPdfParseException khi giá trị sai định dạng.Primitive thông dụng của trình phân tích cú pháp.
PdfTokenizer::readStreamData(int $length)Độ dài luồng.Đọc đúng số byte luồng được yêu cầu.stringPdfParseException khi ranh giới luồng không hợp lệ.Dùng sau khi phân giải độ dài luồng từ dictionary.
PdfTokenizer::peek(int $length = 1)Số byte.Đọc trước mà không di chuyển con trỏ.stringkhông có.Hữu ích cho việc rẽ nhánh trong trình phân tích cú pháp.
PdfTokenizer::searchBackward(string $pattern, int $startFrom = 0)Mẫu cần tìm và offset bắt đầu tùy chọn.Tìm ngược từ cuối hoặc từ offset được cung cấp.`intfalse`không có.
PdfTokenizer::readLine()không có.Đọc một dòng từ offset hiện tại.stringkhông có.Trình trợ giúp quét mức thấp.
CrossRefParser::parseXRefTable(string $data, int $offset)Các byte PDF và offset của bảng xref.Phân tích cú pháp các mục của bảng cross-reference cổ điển.arrayPdfParseException khi dữ liệu xref sai định dạng.API của trình phân tích cú pháp mức thấp.
CrossRefParser::parseXRefStream(string $data, int $offset)Các byte PDF và offset của luồng xref.Phân tích cú pháp các mục của luồng cross-reference.arrayPdfParseException khi dữ liệu luồng sai định dạng.Hỗ trợ các luồng xref của PDF hiện đại.

EInvoiceServiceFactory phân giải lười các contract e-invoice tùy chọn của Premium và trả về null khi chúng không có. BrowserPool quản lý vòng đời của Chrome do bộ kết xuất sở hữu; chỉ quản lý trực tiếp nó trong các worker chạy lâu dài.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém ngoại lệ hoặc thất bại vớiGhi chú
EInvoiceServiceFactory::makeEmbedder()không có.Trả về null trừ khi đã cài phần hỗ trợ e-invoice của Premium Pro.`EmbedderInterfacenull`Các lỗi khởi tạo gói tùy chọn.
EInvoiceServiceFactory::makeValidator()không có.Trả về null trừ khi đã cài phần hỗ trợ kiểm tra của Premium Enterprise.`ValidatorInterfacenull`Các lỗi khởi tạo gói tùy chọn.
EInvoiceServiceFactory::makeDefaultProfile()không có.Trả về profile e-invoice mặc định khi có sẵn.`ProfileInterfacenull`Các lỗi của gói tùy chọn.
EInvoiceServiceFactory::makeSchematronRunner()không có.Trả về null trừ khi đã cài phần hỗ trợ Schematron của Premium Enterprise.`SchematronRunnerInterfacenull`Các lỗi khởi tạo gói tùy chọn.
new BrowserPool(ChromeRendererConfig $config, ?LoggerInterface $logger = null)Cấu hình bộ kết xuất và logger tùy chọn.Trình duyệt khởi động lười ở lần gọi getBrowser() đầu tiên.BrowserPoolkhông có cho đến khi khởi động trình duyệt.Trình trợ giúp vòng đời do bộ kết xuất sở hữu.
BrowserPool::getBrowser()không có.Khởi động hoặc trả về thực thể trình duyệt Chrome hiện tại.BrowserCác lỗi khởi động trình duyệt.Trình trợ giúp vòng đời do bộ kết xuất sở hữu.
BrowserPool::incrementRenderCount()không có.Tăng bộ đếm kết xuất và xoay vòng khi chính sách của pool yêu cầu.voidCác lỗi vòng đời của trình duyệt.Được dùng bởi các worker chạy lâu dài.
BrowserPool::close()không có.Đóng thực thể trình duyệt được quản lý.voidCác lỗi tắt trình duyệt.Gọi khi tắt worker.
  • Bộ kết xuất không phải là sandbox trình duyệt cho HTML không đáng tin cậy. Hãy kiểm tra kích thước, chính sách tài nguyên và quyền của bên gọi trước khi kết xuất.
  • Các API của trình phân tích cú pháp được cố ý giữ hẹp. Hãy dùng chúng để nhập kết quả của Chrome, không phải để sửa chữa PDF nói chung.
  • Hãy đóng rõ ràng các bộ kết xuất trong các worker chạy lâu dài.