Overzicht van NextPDF Artisan
In een oogopslag
Sectie met titel “In een oogopslag”NextPDF Artisan is de Chrome-brug voor NextPDF. De brug stuurt een fragment in Hypertext Markup Language (HTML) via het Chrome DevTools Protocol (CDP) naar een headless Chrome-proces, legt de uitvoer van printToPDF vast en neemt het resultaat als een Form XObject op in het doeldocument in Portable Document Format (PDF). De ingesloten tekst blijft selecteerbaar en doorzoekbaar.
Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”Het Artisan-pakket (nextpdf/artisan) breidt de opensource-engine NextPDF uit met een renderer die de lay-out aan Chrome delegeert. De native HTML-pijplijn van NextPDF dekt al een brede subset van Cascading Style Sheets (CSS). Gebruik de Artisan-brug voor documenten die lay-out op Chrome-niveau nodig hebben, zoals CSS-flexbox en -grid, aangepaste weblettertypen die via een Uniform Resource Identifier (URI) uit databronnen worden geladen en complexe selectors, terwijl de uitvoer vectortekst blijft in plaats van een gerasterde schermafbeelding.
De brug werkt als een pijplijn van kleine componenten met elk één doel. ChromeHtmlRenderer orkestreert een render. ChromeSecurityPolicy valideert de invoer en verpakt die in een vergrendeld HTML-document. BrowserPool beheert de levenscyclus van het Chrome-proces. ViewportCalculator zet PDF-punten om naar CSS-pixels. De NextPDF\Parser-lezer parseert de Chrome-uitvoer en PageImporter zet die om naar een Form XObject. Elke component is final, via de constructor geïnjecteerd en getypeerd op PHPStan-niveau 10.
De brug heeft externe afhankelijkheden. Hij heeft de bibliotheek chrome-php/chrome (^1.15) nodig, plus een Chrome- of Chromium-binary die bereikbaar is voor het PHP-proces. Geen van beide wordt meegeleverd. Als de bibliotheek ontbreekt, werpt de brug ChromeNotAvailableException in plaats van stilzwijgend te falen; zie /integrations/artisan/failure-modes/ op de pagina /integrations/artisan/troubleshooting/.
De renderer stuurt nooit inhoud naar Chrome voordat de invoer ChromeSecurityPolicy::validate() heeft doorstaan. Het document dat Chrome ontvangt, is altijd verpakt met een strikt Content Security Policy (CSP) via de Content-Security-Policy-header en een CDP-netwerkblokkade als verdediging in de diepte. Omdat de brug mogelijk niet-vertrouwde HTML verwerkt, documenteert de pagina /integrations/artisan/security-and-operations/ het transport- en isolatiemodel in plaats van het hier samen te vatten.
Deze pagina beschrijft het gedrag van het pakket zoals het wordt geleverd, geverifieerd aan de hand van src/Artisan/ en de testsuite tests/Unit/Artisan/. Dit is geen claim van pixel-voor-pixelgelijkheid met een interactieve Chrome-browser: animaties worden bij hun laatste frame vastgelegd, de lay-out is niet afhankelijk van JavaScript en alleen de eerste Chrome-pagina wordt geïmporteerd.
Architectuur
Sectie met titel “Architectuur”Verantwoordelijkheden van componenten
Sectie met titel “Verantwoordelijkheden van componenten”| Component | Verantwoordelijkheid | Bron |
|---|---|---|
ChromeHtmlRenderer | Orkestreert één render; retourneert ChromeRenderResult | src/Artisan/ChromeHtmlRenderer.php |
ChromeRendererConfig | Onveranderlijk configuratiewaardeobject | src/Artisan/ChromeRendererConfig.php |
ChromeSecurityPolicy | Invoervalidatie en beveiligde HTML-envelop | src/Artisan/ChromeSecurityPolicy.php |
BrowserPool | Levenscyclus van het Chrome-proces en herstartbeleid | src/Artisan/BrowserPool.php |
ViewportCalculator | Conversie van 72 pt/inch ↔ 96 px/inch | src/Artisan/ViewportCalculator.php |
ChromeRenderResult | Getypeerde render-uitvoer (ChromeRenderResultInterface) | src/Artisan/ChromeRenderResult.php |
PageImporter | Geparseerde Chrome-pagina → ImportedFormXObject | src/Artisan/PageImporter.php |
EInvoiceServiceFactory | Containervrije factory voor Premium e-invoice-contracten | src/Artisan/EInvoiceServiceFactory.php |
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Versieherkomst. Het gepubliceerde Composer-artefact heeft de tag
v0.1.0. Docblocks in de broncode bevatten@since 1.7.0(Chrome-brug) en@since 1.1.0(e-invoice-factory), beide overgenomen van de versielijnnextpdf/corevan vóór de hernoeming; het pakket is hernoemd naarnextpdf/artisanin de CHANGELOG-vermelding van2.0.0. Beschouw de Composer-tag als de gezaghebbende installatieversie en de@since-markeringen als engineversiegeschiedenis. - Alleen de eerste pagina.
PageImporter::import()gaat standaard uit van pagina-index 0. Inhoud die naar een tweede Chrome-pagina overloopt, wordt afgekapt tenzij je een expliciete hoogte opgeeft, zoals behandeld op de pagina /integrations/artisan/production-usage/. - Geen dependency-injection-container (DI-container). Artisan is containerloos.
EInvoiceServiceFactorybiedt omgevingen zonder servicecontainer een consistente manier om services te instantiëren; zie /integrations/artisan/boot-and-discovery/.
Prestaties
Sectie met titel “Prestaties”Bij elke render wordt de Chrome-pagina geladen en wordt printToPDF eenmaal per aanroep uitgevoerd. BrowserPool houdt het Chrome-proces tussen renders in leven en herstart het elke 100 renders om de geheugengroei te begrenzen. Het lay-outwerk van Chrome, niet de brug zelf, domineert het Big-O-gedrag. Voor het gemeten budget van de referentieflow op deze pagina raadpleeg je performance_budget in de frontmatter en de pagina /integrations/artisan/production-usage/.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”De brug rendert mogelijk niet-vertrouwde HTML binnen Chrome. De invoer wordt op grootte en inhoud gevalideerd voordat Chrome deze ziet. Het verpakte document bevat default-src 'none'. Een blokkade op CDP-niveau stopt elke subresource-aanvraag. Het volledige transport- en isolatiemodel, inclusief de expliciete grenzen van de Chrome-sandboxvlag, staat op de pagina /integrations/artisan/security-and-operations/. Beschouw deze sectie niet als de volledige beveiligingshouding.
Commerciële context
Sectie met titel “Commerciële context”De opensource-brug rendert HTML naar PDF. De Premium-niveaus voegen conforme e-invoice-insluiting (Pro) en validatie (Enterprise) toe bovenop het gerenderde document. Als die niveaus niet zijn geïnstalleerd, retourneert EInvoiceServiceFactory null, zodat het opensource-pad ook zonder die niveaus volledig functioneel blijft.
Zie ook
Sectie met titel “Zie ook”- /integrations/artisan/install/
- /integrations/artisan/configuration/
- /integrations/artisan/quickstart/
- /integrations/artisan/chrome-renderer-setup/
- /integrations/artisan/security-and-operations/
- /integrations/artisan/production-usage/