Salta ai contenuti

Riferimento API Artisan

Il pacchetto Artisan (nextpdf/artisan) espone due gruppi di API collegati: un’interfaccia di rendering Chrome — ChromeRendererConfig, ChromeHtmlRenderer, ChromeSecurityPolicy, ChromeRenderResult, ViewportCalculator, BrowserPool — che trasforma un frammento HTML in un PDF prodotto da Chrome, e un’interfaccia ridotta di parser/importer — PdfReader, PageImporter, ImportedFormXObject, e le classi tokenizer/xref — che reintegra l’output prodotto in un documento NextPDF come Form XObject con testo selezionabile.

Punto di partenza: se serve soltanto ottenere un PDF da HTML, raramente è necessario usare direttamente questo pacchetto. Collegare un ChromeRendererConfig a un Document NextPDF e chiamare writeHtmlChrome() (vedere il quickstart). Ricorrere alle classi seguenti solo quando si incorpora un renderer in un worker o si esegue la diagnostica del parser. Il primo esempio in Attività comuni mostra questo percorso a chiamata singola.

I tre flussi seguenti coprono quasi tutti gli usi reali, dalla chiamata di livello più alto fino alla pipeline esplicita di rendering e importazione. Ogni esempio è verificato su nextpdf-Artisan/src (oltre che su README.md / ci/tests/).

Eseguire il rendering di un frammento HTML in un PDF con testo selezionabile — l’unica chiamata canonica.

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

Cosa fa: Chrome impagina il frammento e il bridge incorpora la pagina 0 come Form XObject, mantenendo il testo selezionabile. writeHtmlChrome(string $html, ?float $width = null, ?float $height = null): static adatta automaticamente l’altezza quando $height è null.

Eseguire il renderer e importare la pagina manualmente — la pipeline esplicita dietro writeHtmlChrome(), per i worker e il posizionamento personalizzato.

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

Cosa fa: esegue il rendering in byte PDF con Chrome, li analizza e importa la pagina 0 in un ImportedFormXObject posizionabile. Chiamare sempre close() sul renderer per rilasciare il processo Chrome.

Creare la configurazione da un array in stile framework — per config/*.php o per i parametri del bundle, anziché fissare gli argomenti nel costruttore.

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

Cosa fa: mappa un array di configurazione in formato snake-case sul costruttore; le chiavi non impostate ripiegano sui valori predefiniti e chrome_binary viene applicato solo se è una stringa non vuota.

Questi tipi avviano ed eseguono il rendering: creare un ChromeRendererConfig, passarlo a un ChromeHtmlRenderer, quindi chiamare render() per ottenere un ChromeRenderResult.

SimboloParametriComportamento predefinitoRestituisceGenera o fallisce conNote
new ChromeRendererConfig(?string $chromeBinaryPath = null, int $renderTimeout = 30, string $defaultCss = '', int $maxHtmlSize = 5000000, bool $noSandbox = false)Percorso del binario, timeout, CSS, limite di dimensione HTML, flag del sandbox.Rileva automaticamente Chrome quando il percorso del binario è null; il sandbox resta abilitato se non viene disabilitato.ChromeRendererConfignessuna prevista.Impostare noSandbox solo quando il runtime lo richiede.
ChromeRendererConfig::fromArray(array $config)chrome_binary, render_timeout, default_css, max_html_size, no_sandbox.I valori mancanti usano i valori predefiniti del costruttore.ChromeRendererConfigLe incongruenze di tipo ripiegano sui valori predefiniti per le chiavi opzionali.Corrisponde agli array di configurazione in stile framework.
new ChromeHtmlRenderer(ChromeRendererConfig $config, ?LoggerInterface $logger = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null)Configurazione, logger opzionale, criterio HTML opzionale a livello di parsing.Usa DefaultHtmlSecurityPolicy quando non viene fornito alcun criterio.ChromeHtmlRendererGli errori di configurazione di Chrome emergono al primo rendering.Il renderer mantiene un pool del browser fino a close().
ChromeHtmlRenderer::render(string $html, float $widthPt, float $heightPt = 0)html: frammento di input; widthPt: larghezza della pagina; heightPt: altezza di destinazione o automatica.Calcola automaticamente l’altezza del contenuto quando heightPt <= 0.ChromeRenderResultChromeRenderException; errore di convalida delle dimensioni HTML.Blocca tramite CDP le richieste di rete per le sottorisorse.
ChromeHtmlRenderer::getHtmlSecurityPolicy()nessuno.Restituisce il criterio configurato a livello di parsing.HtmlSecurityPolicyInterfacenessuna prevista.Integra i controlli a livello di trasporto di Chrome.
ChromeHtmlRenderer::close()nessuno.Chiude e svuota il pool del browser.voidGli errori di arresto del browser possono emergere dalla libreria sottostante.Chiamare durante l’arresto del worker.

Ricorrere a queste classi quando occorre convalidare e racchiudere manualmente l’HTML esterno prima di un rendering, invece di passare attraverso ChromeHtmlRenderer::render() (che esegue già questi passaggi).

SimboloParametriComportamento predefinitoRestituisceGenera o fallisce conNote
ChromeSecurityPolicy::validate(string $html, int $maxSize)Input HTML e dimensione massima in byte.Accetta l’input solo se le dimensioni sono entro il limite e non sono presenti costrutti non consentiti.voidChromeRenderException o eccezione di convalida.Eseguire prima del rendering nel browser quando si accetta HTML esterno.
ChromeSecurityPolicy::wrapHtml(string $html, int $viewportWidth, string $defaultCss = '')Frammento HTML, larghezza del viewport, CSS predefinito opzionale.Produce un documento completo per il rendering attorno al frammento.stringErrori di convalida o di costruzione della stringa.Mantiene il CSS specifico del renderer separato dall’HTML dell’applicazione.

Usare queste classi per leggere l’output di un rendering (ChromeRenderResult) e per convertire tra punti PDF e pixel CSS di Chrome durante il dimensionamento del viewport o il calcolo dell’altezza.

SimboloParametriComportamento predefinitoRestituisceGenera o fallisce conNote
new ChromeRenderResult(string $pdfData, float $widthPt, float $heightPt, float $contentHeightCssPx)Byte PDF grezzi, larghezza, altezza, altezza del contenuto misurata.Nessuna convalida oltre alle proprietà tipizzate del costruttore.ChromeRenderResultnessuna prevista.In genere restituito da ChromeHtmlRenderer::render().
ChromeRenderResult::getPdfData()nessuno.Restituisce i byte PDF grezzi prodotti da Chrome.stringnessuna prevista.Usare con PdfReader e PageImporter durante l’incorporamento.
ChromeRenderResult::getWidthPt()nessuno.Restituisce la larghezza richiesta in punti.floatnessuna prevista.Usato per dimensionare l’oggetto form importato.
ChromeRenderResult::getHeightPt()nessuno.Restituisce l’altezza calcolata o richiesta in punti.floatnessuna prevista.L’altezza automatica include un buffer di impaginazione per la stampa.
ViewportCalculator::pointsToCssPx(float $pt)pt: punti PDF.Converte usando 96 px CSS per 72 punti PDF.intnessuna prevista.Arrotonda alla larghezza del viewport di Chrome.
ViewportCalculator::cssPxToPoints(float $px)px: pixel CSS.Converte usando 72 punti PDF per 96 px CSS.floatnessuna prevista.Usato per il calcolo dell’altezza automatica.

Questo è il percorso di importazione principale: analizzare i byte PDF di Chrome con PdfReader, quindi passare il reader a PageImporter::import() per ottenere una pagina incorporabile; gli altri metodi di PdfReader supportano la diagnostica.

SimboloParametriComportamento predefinitoRestituisceGenera o fallisce conNote
new PdfReader(string $data)data: byte PDF completi.Il parser non viene eseguito fino a parse().PdfReadernessuna prevista.Progettato per i PDF generati da Chrome.
PdfReader::parse()nessuno.Analizza la catena xref e il trailer.voidPdfParseException per struttura PDF non valida.Deve essere chiamato prima di accedere a oggetti o pagine.
PdfReader::getObject(int $objNum)Numero dell’oggetto.Risolve l’oggetto analizzato per numero.PdfObjectPdfParseException quando l’oggetto manca o non è corretto.Usare dopo parse().
PdfReader::getTrailer()nessuno.Restituisce il dizionario del trailer analizzato.arrayPdfParseException quando i dati del trailer non sono disponibili.Usato dalla diagnostica e dall’analisi delle revisioni.
PdfReader::getObjectNumbers()nessuno.Restituisce i numeri degli oggetti analizzati.arraynessuna prevista dopo il parsing.Utile per la diagnostica dell’importatore.
PdfReader::getPage(int $pageIndex)pageIndex: indice di pagina in base zero.Nessun parsing implicito.PdfObjectPdfParseException quando manca o è fuori intervallo.L’importatore usa per impostazione predefinita la pagina 0.
PdfReader::getPageContentStream(PdfObject $page)page: oggetto pagina analizzato.Risolve il flusso di contenuto.stringPdfParseException per flussi non validi.Un flusso vuoto causa l’errore dell’importatore.
PdfReader::getPageResources(PdfObject $page)page: oggetto pagina analizzato.Risolve le risorse della pagina.arrayPdfParseException per risorse non valide.Il dizionario delle risorse viene incorporato con l’oggetto form.
PdfReader::getPageMediaBox(PdfObject $page)page: oggetto pagina analizzato.In assenza, ripiega su dimensioni simili al formato A4.arrayErrori del parser.Restituisce le coordinate nello spazio PDF.
PdfReader::resolveRef(mixed $value)Valore analizzato.Risolve i riferimenti agli oggetti in modo ricorsivo dove applicabile.mixedPdfParseException per riferimenti non validi.Helper di tipo interno esposto per i flussi di lavoro dell’importatore.
PdfReader::collectPageResources(PdfObject $page)page: oggetto pagina analizzato.Attraversa i riferimenti alle risorse della pagina.arrayErrori del parser.Usato per incorporare gli oggetti dipendenti con le pagine importate.
PdfReader::getRevisionCount()nessuno.Conta le revisioni incrementali analizzate.intnessuna prevista dopo il parsing.Utile per i PDF firmati o aggiornati in modo incrementale.
PdfReader::getRevisionXRef(int $index)Indice di revisione in base zero.Restituisce una singola tabella xref di revisione.RevisionXRefTablePdfParseException per indice non valido.Usare per la diagnostica delle revisioni di basso livello.
PdfReader::getRevisions()nessuno.Restituisce tutte le tabelle xref di revisione analizzate.arraynessuna prevista dopo il parsing.Vista di sola lettura dello stato del parser.
PageImporter::import(PdfReader $reader, int $pageIndex = 0)Reader analizzato e indice di pagina in base zero.Importa la prima pagina se omesso.ImportedFormXObjectPdfParseException quando non è possibile estrarre la pagina.Raccoglie il flusso di contenuto, la media box, le risorse e gli oggetti referenziati.

Questi value object e helper sono restituiti dal parser o usati internamente — ricorrervi durante l’ispezione di oggetti importati, risorse, flussi o tabelle di revisione.

SimboloParametriComportamento predefinitoRestituisceGenera o fallisce conNote
new ImportedFormXObject(string $contentStream, array $mediaBox, array $embeddedObjects, array $resourcesDict)Flusso di contenuto decodificato, media box, oggetti incorporati, dizionario delle risorse.Memorizza un payload autonomo di form importato.ImportedFormXObjectnessuna prevista.In genere restituito da PageImporter::import().
ImportedFormXObject::getWidth()nessuno.Restituisce la larghezza del form importato in punti.floatnessuna prevista.Usare quando si posiziona l’output di Chrome in una pagina.
ImportedFormXObject::getHeight()nessuno.Restituisce l’altezza del form importato in punti.floatnessuna prevista.I risultati di rendering ad altezza automatica si propagano attraverso questo valore.
ImportedFormXObject::getEmbeddedObjects()nessuno.Restituisce gli oggetti richiesti dal form importato.arraynessuna prevista.Il codice di scrittura usa questi oggetti per preservare le risorse.
ImportedFormXObject::getResourcesDict()nessuno.Restituisce il dizionario delle risorse importato.arraynessuna prevista.Usato durante la creazione del Form XObject.
ImportedFormXObject::getMediaBox()nessuno.Restituisce la media box importata.arraynessuna prevista.Usare per la diagnostica di posizionamento.
ImportedFormXObject::getContentStream()nessuno.Restituisce il flusso di contenuto della pagina importata.stringnessuna prevista.Destinato all’integrazione con i componenti di scrittura/importazione.
new PdfObject(int $objectNumber, int $generation, array $dictionary, ?string $rawStreamData = null, ?string $decodedStreamData = null, ?string $rawDictionaryBytes = null)Numero dell’oggetto, generazione, dizionario analizzato, byte di flusso opzionali, flusso decodificato opzionale, byte di dizionario grezzi opzionali.Memorizza lo stato dell’oggetto analizzato.PdfObjectnessuna prevista.Creato dai componenti interni del parser.
PdfObject::getRawDictionaryBytes()nessuno.Restituisce i byte originali del dizionario quando disponibili.`stringnull`nessuna prevista.
PdfObject::getRawStreamData()nessuno.Restituisce i byte di flusso non decodificati quando disponibili.`stringnull`nessuna prevista.
PdfObject::getDictionary()nessuno.Restituisce le voci del dizionario analizzate.arraynessuna prevista.Vista di sola lettura del parser.
PdfObject::get(string $key)Chiave del dizionario.Restituisce null quando la chiave è assente.mixednessuna prevista.Evita ai chiamanti di analizzare i dizionari grezzi.
PdfObject::getRef(string $key)Chiave del dizionario.Restituisce la tupla di riferimento all’oggetto quando il valore è un riferimento.`arraynull`nessuna prevista.
PdfObject::getArray(string $key)Chiave del dizionario.Restituisce un valore di array o un array vuoto quando non disponibile.arraynessuna prevista.Wrapper di comodità per le voci di dizionario con valore di array.
PdfObject::hasStream()nessuno.Verifica se sono presenti byte di flusso.boolnessuna prevista.Distingue gli oggetti di solo dizionario.
PdfObject::getType()nessuno.Legge /Type.`stringnull`nessuna prevista.
PdfObject::getSubtype()nessuno.Legge /Subtype.`stringnull`nessuna prevista.
RevisionExtractor::extractRevision(string $pdfData, PdfReader $reader, int $revision)Byte PDF, un reader analizzato e l’indice di revisione in base zero.Estrae una revisione incrementale.stringPdfParseException per limiti non validi.Usato dai test e dalla diagnostica del parser.
RevisionExtractor::getRevisionBoundaries(string $pdfData, PdfReader $reader)Byte PDF e un reader analizzato.Individua gli intervalli di byte per le revisioni incrementali.arrayPdfParseException per struttura xref non corretta.Aiuta ad analizzare i PDF firmati o aggiornati in modo incrementale.
`StreamDecoder::decode(string $data, stringarray $filter)`Byte di flusso e uno o più filtri PDF.Applica i filtri in ordine.stringPdfParseException per filtri non supportati o non validi.
new ResourceCollector(PdfReader $reader)Reader analizzato.Inizia con un set di oggetti raccolti vuoto.ResourceCollectornessuna prevista.Usato da PdfReader::collectPageResources().
ResourceCollector::traverse(mixed $value, int $depth = 0)Valore analizzato e profondità di ricorsione.Attraversa i riferimenti alle risorse fino ai limiti di profondità interni.voidErrori del parser per riferimenti non validi.Helper interno per la chiusura delle risorse di importazione della pagina.
ResourceCollector::getCollected()nessuno.Restituisce gli oggetti risorsa raccolti.arraynessuna prevista.Chiamare dopo traverse().
new RevisionXRefTable(int $index, int $xrefOffset, array $xrefEntries, array $trailer, ?int $prevOffset)Indice di revisione, offset xref, voci xref, trailer, offset precedente opzionale.Snapshot immutabile di una singola revisione incrementale.RevisionXRefTablenessuna prevista.Creato dai componenti interni del parser.
RevisionXRefTable::getObjectNumbers()nessuno.Restituisce i numeri degli oggetti attivi nella tabella di revisione.arraynessuna prevista.API diagnostica delle revisioni di basso livello.
RevisionXRefTable::getActiveObjectCount()nessuno.Conta gli oggetti attivi.intnessuna prevista.Utile per le asserzioni del parser.
RevisionXRefTable::hasRootUpdate()nessuno.Indica se la revisione aggiorna la radice del documento.boolnessuna prevista.Utile per l’analisi degli aggiornamenti incrementali.
RevisionXRefTable::getSize()nessuno.Restituisce il valore di dimensione della tabella xref.intnessuna prevista.Rispecchia i metadati xref del PDF analizzato.

Ricorrere a queste classi solo per la diagnostica approfondita del parser o per la riduzione delle fixture — espongono il lexer e i meccanismi di cross-reference sottostanti a PdfReader e non sono necessarie per l’importazione normale.

SimboloParametriComportamento predefinitoRestituisceGenera o fallisce conNote
new PdfTokenizer(string $data, int $offset = 0)Byte PDF e offset iniziale opzionale.Inizia dall’offset zero.PdfTokenizernessuna prevista.Parser lessicale di basso livello.
PdfTokenizer::getOffset()nessuno.Restituisce l’offset in byte corrente.intnessuna prevista.Helper diagnostico per gli errori del parser.
PdfTokenizer::setOffset(int $offset)Offset in byte.Sposta il cursore del tokenizer.voidPdfParseException per offset non valido.Usare con attenzione; lo stato del parser resta responsabilità dei chiamanti.
PdfTokenizer::isEof()nessuno.Verifica se il cursore ha raggiunto la fine.boolnessuna prevista.Helper di ciclo del parser di basso livello.
PdfTokenizer::skipWhitespace()nessuno.Avanza oltre gli spazi vuoti e i commenti PDF.voidnessuna prevista.Usato prima delle letture dei token.
PdfTokenizer::readToken()nessuno.Legge il token scalare successivo.`stringintfloat
PdfTokenizer::readName()nessuno.Legge un oggetto nome PDF.stringPdfParseException per nome non corretto.Decodifica gli escape dei nomi.
PdfTokenizer::readLiteralString()nessuno.Legge una stringa letterale.stringPdfParseException per stringa non corretta.Gestisce parentesi annidate ed escape.
PdfTokenizer::readHexString()nessuno.Legge una stringa esadecimale.stringPdfParseException per dati esadecimali non corretti.Completa i valori esadecimali di lunghezza dispari secondo le regole del parser.
PdfTokenizer::readNumber()nessuno.Legge un intero o un float.`intfloat`PdfParseException per numero non valido.
PdfTokenizer::readKeyword()nessuno.Legge una parola chiave PDF.stringPdfParseException per parola chiave non valida.Mantiene centralizzata l’analisi delle parole chiave.
PdfTokenizer::readDictionary()nessuno.Legge un dizionario PDF.arrayPdfParseException per dizionari non corretti.Usato per oggetti, flussi e trailer.
PdfTokenizer::readArray()nessuno.Legge un array PDF.arrayPdfParseException per array non corretti.Helper ricorsivo del parser.
PdfTokenizer::readValue()nessuno.Legge qualsiasi valore PDF supportato.mixedPdfParseException per valori non corretti.Primitiva comune del parser.
PdfTokenizer::readStreamData(int $length)Lunghezza del flusso.Legge esattamente i byte di flusso richiesti.stringPdfParseException per confini di flusso non validi.Usato dopo la risoluzione della lunghezza del flusso del dizionario.
PdfTokenizer::peek(int $length = 1)Numero di byte.Legge in avanti senza spostare il cursore.stringnessuna prevista.Utile per la diramazione del parser.
PdfTokenizer::searchBackward(string $pattern, int $startFrom = 0)Pattern e offset iniziale opzionale.Esegue la ricerca all’indietro dalla fine o dall’offset fornito.`intfalse`nessuna prevista.
PdfTokenizer::readLine()nessuno.Legge una riga a partire dall’offset corrente.stringnessuna prevista.Helper dello scanner di basso livello.
CrossRefParser::parseXRefTable(string $data, int $offset)Byte PDF e offset della tabella xref.Analizza le voci della tabella xref classica.arrayPdfParseException per dati xref non corretti.API del parser di basso livello.
CrossRefParser::parseXRefStream(string $data, int $offset)Byte PDF e offset del flusso xref.Analizza le voci del flusso xref.arrayPdfParseException per dati di flusso non corretti.Supporta i moderni flussi xref PDF.

EInvoiceServiceFactory risolve in modo lazy i contratti opzionali di fatturazione elettronica Premium (restituendo null quando sono assenti). BrowserPool è l’helper del ciclo di vita di Chrome di proprietà del renderer; gestirlo direttamente solo nei worker a esecuzione prolungata.

SimboloParametriComportamento predefinitoRestituisceGenera o fallisce conNote
EInvoiceServiceFactory::makeEmbedder()nessuno.Restituisce null a meno che non sia installato il supporto per la fatturazione elettronica di Premium Pro.`EmbedderInterfacenull`Errori di costruzione del pacchetto opzionale.
EInvoiceServiceFactory::makeValidator()nessuno.Restituisce null a meno che non sia installato il supporto per la convalida di Premium Enterprise.`ValidatorInterfacenull`Errori di costruzione del pacchetto opzionale.
EInvoiceServiceFactory::makeDefaultProfile()nessuno.Restituisce il profilo di fatturazione elettronica predefinito quando disponibile.`ProfileInterfacenull`Errori del pacchetto opzionale.
EInvoiceServiceFactory::makeSchematronRunner()nessuno.Restituisce null a meno che non sia installato il supporto Schematron di Premium Enterprise.`SchematronRunnerInterfacenull`Errori di costruzione del pacchetto opzionale.
new BrowserPool(ChromeRendererConfig $config, ?LoggerInterface $logger = null)Configurazione del renderer e logger opzionale.Il browser si avvia in modo lazy alla prima chiamata di getBrowser().BrowserPoolnessuna prevista fino all’avvio del browser.Helper del ciclo di vita di proprietà del renderer.
BrowserPool::getBrowser()nessuno.Avvia o restituisce l’istanza corrente del browser Chrome.BrowserErrori di avvio del browser.Helper del ciclo di vita di proprietà del renderer.
BrowserPool::incrementRenderCount()nessuno.Incrementa il contatore di rendering e ruota il browser quando il criterio del pool lo richiede.voidErrori del ciclo di vita del browser.Usato dai worker a esecuzione prolungata.
BrowserPool::close()nessuno.Chiude l’istanza del browser gestita.voidErrori di arresto del browser.Chiamare durante l’arresto del worker.
  • Il renderer non costituisce una sandbox del browser per HTML non attendibile. Convalidare le dimensioni, il criterio delle risorse e l’autorizzazione del chiamante prima del rendering.
  • Le API del parser sono volutamente ridotte. Servono per l’importazione dell’output di Chrome, non per la riparazione generale dei PDF.
  • Chiudere i renderer in modo esplicito nei worker a esecuzione prolungata.