Snelstart met Artisan
In één oogopslag
Sectie met titel “In één oogopslag”Koppel een ChromeRendererConfig aan een NextPDF-document, roep writeHtmlChrome() aan en sla het Portable Document Format (PDF)-bestand op. Chrome rendert de Hypertext Markup Language (HTML). De bridge importeert het resultaat als Form XObject en houdt de tekst selecteerbaar.
Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”writeHtmlChrome() is een methode op het NextPDF-core-Document. De HasTextOutput-concern levert deze methode. De methode valideert de invoer en bepaalt de Artisan-renderer. Daarna stuurt de methode de HTML naar Chrome, parseert de geretourneerde PDF en voegt pagina 0 als Form XObject in op de huidige cursorpositie. De publieke signatuur is writeHtmlChrome(string $html, ?float $width = null, ?float $height = null): static en is geverifieerd aan de hand van nextpdf/coresrc/Core/Concerns/HasTextOutput.php.
Codevoorbeeld — snelstart
Sectie met titel “Codevoorbeeld — snelstart”<?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; font-family: sans-serif;"> <div style="flex: 1; background: #f0f0f0; padding: 24px;"> <h2>Revenue</h2><p style="font-size: 2em; color: #2563eb;">$124,500</p> </div> <div style="flex: 1; background: #f0f0f0; padding: 24px;"> <h2>Orders</h2><p style="font-size: 2em; color: #16a34a;">1,847</p> </div> </div>');
$doc->save('/tmp/report.pdf');Dit is de canonieke flow uit de README.md van het pakket. Chrome verwerkt de Cascading Style Sheets (CSS)-flex-lay-out. De getallen blijven in de uitvoer als tekst selecteerbaar, omdat de pagina als Form XObject wordt ingebed en niet als rasterafbeelding.
Aangepast paginaformaat
Sectie met titel “Aangepast paginaformaat”Geef een expliciete breedte en hoogte in PDF-punten op, zodat de uitvoer op een vast paginaformaat past (A4 weergegeven):
$doc->writeHtmlChrome($html, width: 595.28, height: 841.89);Wanneer je beide waarden opgeeft, drukt Chrome precies op dat papierformaat af. Wanneer je de hoogte weglaat (of null doorgeeft), past de bridge zich aan de gemeten contenthoogte aan en voegt een kleine veiligheidsbuffer voor reflow toe. Zie /integrations/artisan/production-usage/ voor de reden waarom die buffer bestaat en wanneer je deze overschrijft.
Wat je krijgt
Sectie met titel “Wat je krijgt”| Eigenschap | Gedrag |
|---|---|
| Tekst | Selecteerbaar en doorzoekbaar (vectortekst, niet gerasterd) |
| Cascading Style Sheets (CSS) | Chrome-lay-out: flexbox, grid, complexe selectors, webfonts via data-Uniform Resource Identifier (URI)-waarden |
| Netwerk | Geen subresource-ophalingen; externe Uniform Resource Locators (URLs) worden niet geladen (zie /integrations/artisan/security-and-operations/) |
| Pagina’s | Pagina 0 van de Chrome-uitvoer wordt geïmporteerd |
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Lege HTML heeft geen effect.
writeHtmlChrome('')retourneert het document ongewijzigd (geverifieerd inHasTextOutput::writeHtmlChrome). - Nog geen pagina aanwezig. Als het document geen pagina heeft, voegt
writeHtmlChrome()er een toe vóór het renderen. - Externe assets laden niet.
<img src="https://...">rendert leeg. Neem assets inline op alsdata:-URI’s. Dit hoort bij de netwerkisolatie; het is geen bug. Zie /integrations/artisan/security-and-operations/. - Bridge ontbreekt. Als
nextpdf/artisanniet is geïnstalleerd, werpt de core een layout-uitzondering in plaats van een fatale fout.
Prestaties
Sectie met titel “Prestaties”Bij de eerste aanroep tellen de opstart- en layouttijd van Chrome mee. Volgende aanroepen hergebruiken het actieve Chrome-proces via BrowserPool. Lees voor batchtaken of langlopende workers de richtlijnen over levenscyclus en resources op de pagina /integrations/artisan/production-usage/.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”De snelstart gebruikt vertrouwde, hard-gecodeerde HTML. Voordat je HTML die door gebruikers kan worden beïnvloed aan writeHtmlChrome() doorgeeft, lees je /integrations/artisan/security-and-operations/. De bridge isoleert netwerktoegang, maar HTML-rendering heeft nog steeds een aanvalsoppervlak.
Commerciële context
Sectie met titel “Commerciële context”Dit produceert een PDF uit HTML met de open-source bridge. Om een conform e-factuur-Extensible Markup Language (XML)-bestand in hetzelfde document in te bedden, levert het Premium Pro-niveau een embedder. Het open-source pad blijft onaangetast wanneer Premium ontbreekt.
Zie ook
Sectie met titel “Zie ook”- /integrations/artisan/install/
- /integrations/artisan/configuration/
- /integrations/artisan/production-usage/
- /integrations/artisan/troubleshooting/
- /integrations/artisan/security-and-operations/