Pular para o conteúdo

Referência da API Artisan

O pacote Artisan (nextpdf/artisan) expõe dois grupos de APIs relacionados. O conjunto de renderização do Chrome — ChromeRendererConfig, ChromeHtmlRenderer, ChromeSecurityPolicy, ChromeRenderResult, ViewportCalculator e BrowserPool — transforma um fragmento de Hypertext Markup Language (HTML) em um arquivo Portable Document Format (PDF) produzido pelo Chrome. O conjunto de parser e importação — PdfReader, PageImporter, ImportedFormXObject e as classes auxiliares de tokenizer e cross-reference — incorpora essa saída renderizada de volta em um documento NextPDF como um Form XObject com texto selecionável.

Comece por aqui: se você só precisa gerar um PDF a partir de HTML, raramente usará este pacote diretamente. Anexe um ChromeRendererConfig a um Document NextPDF e chame writeHtmlChrome(); consulte o guia rápido. Use as classes abaixo quando estiver incorporando um renderizador em um worker ou executando diagnósticos do parser. O primeiro exemplo em Tarefas comuns mostra o caminho com uma única chamada.

Os três fluxos abaixo cobrem quase todo o uso em produção, da chamada de mais alto nível ao pipeline explícito de renderização e importação. Cada exemplo foi conferido com nextpdf-Artisan/src (e com o README.md / ci/tests/ do pacote).

Renderize um fragmento de HTML em um PDF com texto selecionável usando a chamada canônica.

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

O que faz: o Chrome calcula o layout do fragmento. A ponte incorpora a página 0 como um Form XObject, de modo que o texto permanece selecionável. writeHtmlChrome(string $html, ?float $width = null, ?float $height = null): static ajusta a altura automaticamente quando $height é null.

Execute o renderizador e importe a página por conta própria quando precisar do pipeline explícito por trás de writeHtmlChrome(), como em workers ou fluxos de posicionamento personalizados.

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

O que faz: renderiza os bytes de PDF do Chrome, faz o parse desses bytes e importa a página 0 para um ImportedFormXObject que você pode posicionar. Sempre chame close() no renderizador para liberar o processo do Chrome.

Monte a configuração a partir de um array no estilo de framework para config/*.php ou de parâmetros de bundle, em vez de manter argumentos de construtor fixos no código.

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

O que faz: mapeia um array de configuração em snake-case para o construtor. Chaves não definidas usam os valores padrão, e chrome_binary só é aplicado quando é uma string não vazia.

Esses tipos executam o caminho de renderização. Monte um ChromeRendererConfig, passe-o para um ChromeHtmlRenderer e então chame render() para obter um ChromeRenderResult.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comObservações
new ChromeRendererConfig(?string $chromeBinaryPath = null, int $renderTimeout = 30, string $defaultCss = '', int $maxHtmlSize = 5000000, bool $noSandbox = false)Caminho do binário, timeout, Cascading Style Sheets (CSS), limite de tamanho do HTML, flag de sandbox.Detecta o Chrome automaticamente quando o caminho do binário é null; o sandbox permanece habilitado, a menos que seja desabilitado.ChromeRendererConfignenhuma esperada.Defina noSandbox apenas quando o runtime exigir.
ChromeRendererConfig::fromArray(array $config)chrome_binary, render_timeout, default_css, max_html_size, no_sandbox.Valores ausentes usam os padrões do construtor.ChromeRendererConfigIncompatibilidades de tipo recorrem aos valores padrão para chaves opcionais.Corresponde a arrays de configuração no estilo de framework.
new ChromeHtmlRenderer(ChromeRendererConfig $config, ?LoggerInterface $logger = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null)Configuração, logger opcional, política de HTML opcional da camada de parse.Usa DefaultHtmlSecurityPolicy quando nenhuma política é fornecida.ChromeHtmlRendererErros de configuração do Chrome ocorrem na primeira renderização.O renderizador mantém um pool de navegadores até close().
ChromeHtmlRenderer::render(string $html, float $widthPt, float $heightPt = 0)html: fragmento de entrada; widthPt: largura do papel; heightPt: altura desejada ou automática.Calcula automaticamente a altura do conteúdo quando heightPt <= 0.ChromeRenderResultChromeRenderException; falha na validação do tamanho do HTML.Bloqueia requisições de rede de sub-recursos por meio do Chrome DevTools Protocol (CDP).
ChromeHtmlRenderer::getHtmlSecurityPolicy()nenhum.Retorna a política configurada da camada de parse.HtmlSecurityPolicyInterfacenenhuma esperada.Complementa os controles do Chrome em nível de transporte.
ChromeHtmlRenderer::close()nenhum.Fecha o pool de navegadores e o limpa.voidErros de encerramento do navegador podem surgir da biblioteca subjacente.Chame durante o encerramento do worker.

Use estas APIs quando você validar e encapsular HTML externo antes de renderizar, em vez de chamar ChromeHtmlRenderer::render() diretamente, que já as chama.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comObservações
ChromeSecurityPolicy::validate(string $html, int $maxSize)Entrada de HTML e tamanho máximo em bytes.Aceita a entrada apenas quando o tamanho e as construções não permitidas passam na validação.voidChromeRenderException ou exceção de validação.Execute antes da renderização no navegador ao aceitar HTML externo.
ChromeSecurityPolicy::wrapHtml(string $html, int $viewportWidth, string $defaultCss = '')Fragmento de HTML, largura da viewport, CSS padrão opcional.Produz um documento de renderização completo em torno do fragmento.stringErros de validação ou de construção de string.Mantém o CSS específico do renderizador separado do HTML da aplicação.

Use estes auxiliares para ler um resultado de renderização (ChromeRenderResult) e converter entre pontos de PDF e pixels de CSS do Chrome ao dimensionar uma viewport ou calcular a altura.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comObservações
new ChromeRenderResult(string $pdfData, float $widthPt, float $heightPt, float $contentHeightCssPx)Bytes de PDF brutos, largura, altura, altura medida do conteúdo.Sem validação além das propriedades tipadas do construtor.ChromeRenderResultnenhuma esperada.Geralmente retornado por ChromeHtmlRenderer::render().
ChromeRenderResult::getPdfData()nenhum.Retorna os bytes de PDF brutos produzidos pelo Chrome.stringnenhuma esperada.Use com PdfReader e PageImporter ao incorporar.
ChromeRenderResult::getWidthPt()nenhum.Retorna a largura solicitada em pontos.floatnenhuma esperada.Usado para dimensionar o objeto de formulário importado.
ChromeRenderResult::getHeightPt()nenhum.Retorna a altura calculada ou solicitada em pontos.floatnenhuma esperada.A altura automática inclui uma margem de layout de impressão.
ViewportCalculator::pointsToCssPx(float $pt)pt: pontos de PDF.Converte usando 96 px de CSS por 72 pontos de PDF.intnenhuma esperada.Arredondado para a largura da viewport do Chrome.
ViewportCalculator::cssPxToPoints(float $px)px: pixels de CSS.Converte usando 72 pontos de PDF por 96 px de CSS.floatnenhuma esperada.Usado para o cálculo da altura automática.

Este é o caminho de importação. Faça o parse dos bytes de PDF do Chrome com PdfReader e, em seguida, passe o reader para PageImporter::import() para obter uma página incorporável; os demais métodos de PdfReader dão suporte a diagnósticos.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comObservações
new PdfReader(string $data)data: bytes de PDF completos.O parser só é executado em parse().PdfReadernenhuma esperada.Projetado para PDFs gerados pelo Chrome.
PdfReader::parse()nenhum.Faz o parse da cadeia de cross-reference (xref) e do trailer.voidPdfParseException para estrutura de PDF inválida.Deve ser chamado antes do acesso a object/page.
PdfReader::getObject(int $objNum)Número do objeto.Resolve o objeto analisado a partir do número.PdfObjectPdfParseException quando o objeto está ausente ou malformado.Use após parse().
PdfReader::getTrailer()nenhum.Retorna o dicionário de trailer analisado.arrayPdfParseException quando os dados do trailer estão indisponíveis.Usado por diagnósticos e análise de revisões.
PdfReader::getObjectNumbers()nenhum.Retorna os números de objetos analisados.arraynenhuma esperada após o parse.Útil para diagnósticos do importador.
PdfReader::getPage(int $pageIndex)pageIndex: índice de página baseado em zero.Sem parse implícito.PdfObjectPdfParseException quando ausente ou fora do intervalo.O importador usa a página 0 por padrão.
PdfReader::getPageContentStream(PdfObject $page)page: objeto de página analisado.Resolve o stream de conteúdo.stringPdfParseException para streams inválidos.Um stream vazio causa falha do importador.
PdfReader::getPageResources(PdfObject $page)page: objeto de página analisado.Resolve os recursos da página.arrayPdfParseException para recursos inválidos.O dicionário de recursos é incorporado junto com o objeto de formulário.
PdfReader::getPageMediaBox(PdfObject $page)page: objeto de página analisado.Recorre a dimensões semelhantes a A4 quando ausente.arrayFalhas do parser.Retorna coordenadas no espaço do PDF.
PdfReader::resolveRef(mixed $value)Valor analisado.Resolve referências de objetos recursivamente quando aplicável.mixedPdfParseException para referências inválidas.Auxiliar interno exposto para fluxos de trabalho do importador.
PdfReader::collectPageResources(PdfObject $page)page: objeto de página analisado.Percorre as referências de recursos da página.arrayFalhas do parser.Usado para incorporar objetos dependentes junto com as páginas importadas.
PdfReader::getRevisionCount()nenhum.Conta as revisões incrementais analisadas.intnenhuma esperada após o parse.Útil para PDFs assinados ou atualizados de forma incremental.
PdfReader::getRevisionXRef(int $index)Índice de revisão baseado em zero.Retorna uma tabela xref da revisão.RevisionXRefTablePdfParseException para índice inválido.Use para diagnósticos de revisão de baixo nível.
PdfReader::getRevisions()nenhum.Retorna todas as tabelas xref de revisão analisadas.arraynenhuma esperada após o parse.Visão somente leitura do estado do parser.
PageImporter::import(PdfReader $reader, int $pageIndex = 0)Reader analisado e índice de página baseado em zero.Importa a primeira página quando omitido.ImportedFormXObjectPdfParseException quando a página não pode ser extraída.Coleta o stream de conteúdo, a media box, os recursos e os objetos referenciados.

Esses objetos de valor e auxiliares são retornados pelo parser ou usados internamente. Use-os quando estiver inspecionando objetos importados, recursos, streams ou tabelas de revisão.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comObservações
new ImportedFormXObject(string $contentStream, array $mediaBox, array $embeddedObjects, array $resourcesDict)Stream de conteúdo decodificado, media box, objetos incorporados, dicionário de recursos.Armazena um payload autocontido de formulário importado.ImportedFormXObjectnenhuma esperada.Geralmente retornado por PageImporter::import().
ImportedFormXObject::getWidth()nenhum.Retorna a largura do formulário importado em pontos.floatnenhuma esperada.Use ao posicionar a saída do Chrome em uma página.
ImportedFormXObject::getHeight()nenhum.Retorna a altura do formulário importado em pontos.floatnenhuma esperada.Resultados de renderização com altura automática se propagam por esse valor.
ImportedFormXObject::getEmbeddedObjects()nenhum.Retorna os objetos exigidos pelo formulário importado.arraynenhuma esperada.O código do writer usa esses objetos para preservar os recursos.
ImportedFormXObject::getResourcesDict()nenhum.Retorna o dicionário de recursos importado.arraynenhuma esperada.Usado ao construir o Form XObject.
ImportedFormXObject::getMediaBox()nenhum.Retorna a media box importada.arraynenhuma esperada.Use para diagnósticos de posicionamento.
ImportedFormXObject::getContentStream()nenhum.Retorna o stream de conteúdo da página importada.stringnenhuma esperada.Destinado à integração de writer/import.
new PdfObject(int $objectNumber, int $generation, array $dictionary, ?string $rawStreamData = null, ?string $decodedStreamData = null, ?string $rawDictionaryBytes = null)Número do objeto, geração, dicionário analisado, bytes de stream opcionais, stream decodificado opcional, bytes de dicionário brutos opcionais.Armazena o estado do objeto analisado.PdfObjectnenhuma esperada.Criado pelos internos do parser.
PdfObject::getRawDictionaryBytes()nenhum.Retorna os bytes originais do dicionário quando disponíveis.`stringnull`nenhuma esperada.
PdfObject::getRawStreamData()nenhum.Retorna os bytes de stream não decodificados quando disponíveis.`stringnull`nenhuma esperada.
PdfObject::getDictionary()nenhum.Retorna as entradas do dicionário analisado.arraynenhuma esperada.Visão somente leitura do parser.
PdfObject::get(string $key)Chave do dicionário.Retorna null quando a chave está ausente.mixednenhuma esperada.Evita que os chamadores façam o parse de dicionários brutos.
PdfObject::getRef(string $key)Chave do dicionário.Retorna a tupla de referência de objeto quando o valor é uma referência.`arraynull`nenhuma esperada.
PdfObject::getArray(string $key)Chave do dicionário.Retorna um valor de array ou um array vazio quando indisponível.arraynenhuma esperada.Wrapper de conveniência para entradas de dicionário com valor de array.
PdfObject::hasStream()nenhum.Verifica se os bytes de stream estão presentes.boolnenhuma esperada.Distingue objetos somente de dicionário.
PdfObject::getType()nenhum./Type.`stringnull`nenhuma esperada.
PdfObject::getSubtype()nenhum./Subtype.`stringnull`nenhuma esperada.
RevisionExtractor::extractRevision(string $pdfData, PdfReader $reader, int $revision)Bytes de PDF, um reader analisado e o índice de revisão baseado em zero.Extrai uma revisão incremental.stringPdfParseException para limites inválidos.Usado por testes e diagnósticos do parser.
RevisionExtractor::getRevisionBoundaries(string $pdfData, PdfReader $reader)Bytes de PDF e um reader analisado.Descobre os intervalos de bytes para revisões incrementais.arrayPdfParseException para estrutura de xref malformada.Ajuda a analisar PDFs assinados ou atualizados de forma incremental.
`StreamDecoder::decode(string $data, stringarray $filter)`Bytes de stream e um ou mais filtros de PDF.Aplica os filtros em ordem.stringPdfParseException para filtros não suportados ou inválidos.
new ResourceCollector(PdfReader $reader)Reader analisado.Começa com um conjunto de objetos coletados vazio.ResourceCollectornenhuma esperada.Usado por PdfReader::collectPageResources().
ResourceCollector::traverse(mixed $value, int $depth = 0)Valor analisado e profundidade de recursão.Percorre as referências de recursos até os limites internos de profundidade.voidFalhas do parser para referências inválidas.Auxiliar interno para fechar o conjunto de recursos de importação de página.
ResourceCollector::getCollected()nenhum.Retorna os objetos de recurso coletados.arraynenhuma esperada.Chame após traverse().
new RevisionXRefTable(int $index, int $xrefOffset, array $xrefEntries, array $trailer, ?int $prevOffset)Índice de revisão, deslocamento do xref, entradas do xref, trailer, deslocamento anterior opcional.Snapshot imutável de uma revisão incremental.RevisionXRefTablenenhuma esperada.Criado pelos componentes internos do parser.
RevisionXRefTable::getObjectNumbers()nenhum.Retorna os números dos objetos ativos na tabela de revisão.arraynenhuma esperada.API de diagnóstico de revisão de baixo nível.
RevisionXRefTable::getActiveObjectCount()nenhum.Conta os objetos ativos.intnenhuma esperada.Útil para asserts do parser.
RevisionXRefTable::hasRootUpdate()nenhum.Informa se a revisão atualiza a raiz do documento.boolnenhuma esperada.Útil para a análise de atualizações incrementais.
RevisionXRefTable::getSize()nenhum.Retorna o valor de tamanho da tabela xref.intnenhuma esperada.Espelha os metadados de xref do PDF analisado.

Use estas APIs apenas para diagnósticos profundos do parser ou redução de fixtures. Elas expõem o lexer e o mecanismo de cross-reference sob PdfReader e não são necessárias para a importação normal.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comObservações
new PdfTokenizer(string $data, int $offset = 0)Bytes de PDF e deslocamento inicial opcional.Começa no deslocamento zero.PdfTokenizernenhuma esperada.Parser lexical de baixo nível.
PdfTokenizer::getOffset()nenhum.Retorna o deslocamento de byte atual.intnenhuma esperada.Auxiliar de diagnóstico para erros do parser.
PdfTokenizer::setOffset(int $offset)Deslocamento em bytes.Move o cursor do tokenizer.voidPdfParseException para deslocamento inválido.Use com cuidado; os chamadores controlam o estado do parser.
PdfTokenizer::isEof()nenhum.Verifica se o cursor chegou ao fim.boolnenhuma esperada.Auxiliar de loop do parser de baixo nível.
PdfTokenizer::skipWhitespace()nenhum.Avança além do espaço em branco e dos comentários do PDF.voidnenhuma esperada.Usado antes das leituras de token.
PdfTokenizer::readToken()nenhum.Lê o próximo token escalar.`stringintfloat
PdfTokenizer::readName()nenhum.Lê um objeto name do PDF.stringPdfParseException para name malformado.Decodifica os escapes do name.
PdfTokenizer::readLiteralString()nenhum.Lê uma string literal.stringPdfParseException para string malformada.Trata parênteses aninhados e escapes.
PdfTokenizer::readHexString()nenhum.Lê uma string hexadecimal.stringPdfParseException para hex malformado.Preenche o hex de comprimento ímpar de acordo com as regras do parser.
PdfTokenizer::readNumber()nenhum.Lê um integer ou float.`intfloat`PdfParseException para número inválido.
PdfTokenizer::readKeyword()nenhum.Lê uma keyword do PDF.stringPdfParseException para keyword inválida.Mantém o parse de keywords centralizado.
PdfTokenizer::readDictionary()nenhum.Lê um dicionário do PDF.arrayPdfParseException para dicionários malformados.Usado para objetos, streams e trailers.
PdfTokenizer::readArray()nenhum.Lê um array do PDF.arrayPdfParseException para arrays malformados.Auxiliar recursivo do parser.
PdfTokenizer::readValue()nenhum.Lê qualquer valor de PDF suportado.mixedPdfParseException para valores malformados.Primitiva compartilhada do parser.
PdfTokenizer::readStreamData(int $length)Comprimento do stream.Lê exatamente os bytes de stream solicitados.stringPdfParseException para limites de stream inválidos.Usado após a resolução do comprimento do stream do dicionário.
PdfTokenizer::peek(int $length = 1)Quantidade de bytes.Lê adiante sem avançar.stringnenhuma esperada.Útil para ramificação do parser.
PdfTokenizer::searchBackward(string $pattern, int $startFrom = 0)Padrão e deslocamento inicial opcional.Pesquisa para trás a partir do fim ou do deslocamento fornecido.`intfalse`nenhuma esperada.
PdfTokenizer::readLine()nenhum.Lê uma linha a partir do deslocamento atual.stringnenhuma esperada.Auxiliar de scanner de baixo nível.
CrossRefParser::parseXRefTable(string $data, int $offset)Bytes de PDF e deslocamento da tabela xref.Faz o parse das entradas clássicas da tabela de cross-reference.arrayPdfParseException para dados de xref malformados.API do parser de baixo nível.
CrossRefParser::parseXRefStream(string $data, int $offset)Bytes de PDF e deslocamento do stream de xref.Faz o parse das entradas do stream de cross-reference.arrayPdfParseException para dados de stream malformados.Dá suporte a streams de xref de PDF modernos.

EInvoiceServiceFactory resolve sob demanda contratos opcionais de e-invoice do Premium e retorna null quando eles estão ausentes. BrowserPool gerencia o ciclo de vida do Chrome mantido pelo renderizador; gerencie-o diretamente apenas em workers de longa duração.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comObservações
EInvoiceServiceFactory::makeEmbedder()nenhum.Retorna null a menos que o suporte a e-invoice do Premium Pro esteja instalado.`EmbedderInterfacenull`Erros de construção de pacote opcional.
EInvoiceServiceFactory::makeValidator()nenhum.Retorna null a menos que o suporte a validação do Premium Enterprise esteja instalado.`ValidatorInterfacenull`Erros de construção de pacote opcional.
EInvoiceServiceFactory::makeDefaultProfile()nenhum.Retorna o perfil de e-invoice padrão quando disponível.`ProfileInterfacenull`Erros de pacote opcional.
EInvoiceServiceFactory::makeSchematronRunner()nenhum.Retorna null a menos que o suporte a Schematron do Premium Enterprise esteja instalado.`SchematronRunnerInterfacenull`Erros de construção de pacote opcional.
new BrowserPool(ChromeRendererConfig $config, ?LoggerInterface $logger = null)Configuração do renderizador e logger opcional.O navegador inicia sob demanda na primeira chamada de getBrowser().BrowserPoolnenhuma esperada até a inicialização do navegador.Auxiliar de ciclo de vida mantido pelo renderizador.
BrowserPool::getBrowser()nenhum.Inicia ou retorna a instância atual do navegador Chrome.BrowserErros de inicialização do navegador.Auxiliar de ciclo de vida mantido pelo renderizador.
BrowserPool::incrementRenderCount()nenhum.Incrementa o contador de renderizações e faz a rotação quando a política do pool exige.voidErros de ciclo de vida do navegador.Usado por workers de longa duração.
BrowserPool::close()nenhum.Fecha a instância de navegador gerenciada.voidErros de encerramento do navegador.Chame durante o encerramento do worker.
  • O renderizador não é um sandbox de navegador para HTML não confiável. Valide o tamanho, a política de recursos e a autorização do chamador antes de renderizar.
  • As APIs do parser são intencionalmente restritas. Use-as para importar a saída do Chrome, não para reparo geral de PDF.
  • Feche os renderizadores explicitamente em workers de longa duração.