Pular para o conteúdo

Referência da API do Gotenberg

O pacote Gotenberg expõe uma ponte de serviço, GotenbergBridge. Ela converte um documento Office (docx, xlsx, pptx, odt, ods, odp) para Portable Document Format (PDF) ao enviar uma requisição POST para um serviço Gotenberg externo. A ponte trabalha com os objetos de valor que você passa ou lê: GotenbergConfig (o descritor de serviço imutável e os limites), OfficeFormat (o enum de formatos suportados), GotenbergConvertPayload (o corpo multipart da requisição) e GotenbergConvertResult (a resposta PDF já analisada). Uma segunda camada, GotenbergSecurityPolicy, GotenbergResponseParser e PinnedCurlTransport, fornece a infraestrutura de validação, análise e transporte com pinning que a ponte aciona internamente. Use essa camada apenas quando você escrever transporte personalizado ou código de teste.

Comece por aqui: Crie um GotenbergConfig com a URL de serviço Hypertext Transfer Protocol Secure (HTTPS) e passe-o para uma GotenbergBridge com o cliente PSR-18 e as factories PSR-17. Chame convertFile() ou convertString() e depois leia pdfData no GotenbergConvertResult.

Use estes trechos verificados e executáveis para as tarefas do pacote que você provavelmente vai realizar com mais frequência.

Aponte a ponte para um caminho. Ela detecta o formato pela extensão.

<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergBridge;
use NextPDF\Gotenberg\GotenbergConfig;
$config = new GotenbergConfig(
apiUrl: 'https://gotenberg.example.com',
timeout: 60,
apiKey: $apiKey,
);
$bridge = new GotenbergBridge(
config: $config,
httpClient: $psrHttpClient,
requestFactory: $psrRequestFactory,
streamFactory: $psrStreamFactory,
responseFactory: $psrResponseFactory,
);
$result = $bridge->convertFile('/path/to/report.docx');
\file_put_contents('/path/to/report.pdf', $result->pdfData);

O que ela faz: valida a URL, o caminho, o tamanho e o nome do arquivo; envia uma requisição multipart; e grava em disco os bytes do PDF retornado.

Use convertString() quando você já tiver os bytes. O nome do arquivo orienta a detecção de formato.

<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergBridge;
/** @var GotenbergBridge $bridge */
$result = $bridge->convertString($xlsxBytes, 'spreadsheet.xlsx');
if (! $result->isValid()) {
throw new \RuntimeException('Conversion did not return a valid PDF.');
}

O que ela faz: detecta xlsx pelo nome do arquivo, converte os bytes e confirma que o resultado começa com a assinatura %PDF antes de você usá-lo.

Verificar a disponibilidade do serviço antes de converter

Seção intitulada “Verificar a disponibilidade do serviço antes de converter”

Condicione o trabalho a isAvailable(). Ela valida a URL sem tráfego de rede e depois envia uma requisição HEAD para /health.

<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergBridge;
/** @var GotenbergBridge $bridge */
if (! $bridge->isAvailable()) {
throw new \RuntimeException('Gotenberg is not reachable.');
}

O que ela faz: retorna false (nunca lança exceção) para uma URL vazia, sem HTTPS ou com endereço privado, e para qualquer erro de rede, para que você possa falhar rapidamente antes de disparar uma conversão.

Esta tabela cobre a superfície da ponte. Use-a quando você construir GotenbergBridge ou chamar seus métodos de conversão e disponibilidade.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comNotas
new GotenbergBridge(GotenbergConfig $config, ClientInterface $httpClient, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory, ?LoggerInterface $logger = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null, ?ResponseFactoryInterface $responseFactory = null)Config, cliente PSR-18, factories PSR-17, logger opcional, política HTML opcional, response factory opcional.Usa DefaultHtmlSecurityPolicy quando você não fornece uma política.GotenbergBridgeErros de wiring do container.A response factory habilita o transporte cURL com pinning quando o pinning é obrigatório.
GotenbergBridge::convertFile(string $filePath)Caminho no sistema de arquivos para um documento Office.Usa a extensão do arquivo para detectar o formato.GotenbergConvertResultGotenbergConvertException, RuntimeException, ValueError para formato não suportado.Resolve o caminho real e verifica a legibilidade, o tamanho e o nome do arquivo.
GotenbergBridge::convertString(string $content, string $fileName)Bytes brutos e nome de arquivo original.Usa a extensão do nome do arquivo para detectar o formato.GotenbergConvertResultIgual a convertFile.Use quando a aplicação já tiver os bytes do arquivo.
GotenbergBridge::isAvailable()nenhum.Envia HEAD para /health quando a configuração é válida.boolRetorna false em caso de erro.Apenas sinaliza disponibilidade.
GotenbergBridge::getHtmlSecurityPolicy()nenhum.Retorna a política configurada da camada de análise.HtmlSecurityPolicyInterfacenenhum esperado.Complementa a política de segurança no nível de transporte.

Esta tabela cobre os objetos de valor que você constrói diretamente: o descritor de serviço GotenbergConfig e os transportadores de requisição e resposta GotenbergConvertPayload/GotenbergConvertResult. Use-os quando você precisar de um controle mais fino do que os dois pontos de entrada de conversão oferecem.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comNotas
new GotenbergConfig(string $apiUrl = '', int $timeout = 30, int $maxFileSize = 52428800, string $apiKey = '', array $pinnedPublicKeys = [], array $backupPublicKeys = [])URL da API, timeout, tamanho máximo do arquivo, bearer token, conjuntos de pins.Uma URL vazia é inválida; o tamanho máximo padrão é 50 MiB.GotenbergConfignenhum esperado.Mantenha a chave de API em segredo.
GotenbergConfig::fromArray(array $config)api_url, timeout, max_file_size, api_key, arrays de pins.Valores opcionais ausentes usam os padrões do construtor.GotenbergConfignenhum esperado.Listas de strings ignoram valores que não são strings.
GotenbergConfig::isValid()nenhum.Válido quando a URL da API não está vazia.boolnenhum esperado.A segurança da URL é validada antes de qualquer operação de rede.
GotenbergConfig::allPublicKeyPins()nenhum.Combina os pins primários e de backup.list<string>nenhum esperado.Uma lista vazia desativa o pinning.
new GotenbergConvertPayload(string $fileName, string $fileContent, OfficeFormat $format, bool $landscape = false, string $nativePageRanges = '')Nome do arquivo, bytes, formato, flag de orientação, intervalos de páginas.Retrato; todas as páginas.GotenbergConvertPayloadnenhum esperado.O payload é convertido em dados de formulário multipart.
GotenbergConvertPayload::toMultipartBody(string $boundary)Boundary multipart.Inclui o campo de intervalo de páginas apenas quando ele não está vazio.stringnenhum esperado.A ponte gera o boundary.
GotenbergConvertPayload::contentType(string $boundary)Boundary multipart.Usa multipart/form-data.stringnenhum esperado.Anexe como o Content-Type.
new GotenbergConvertResult(string $pdfData, OfficeFormat $sourceFormat, float $renderTimeMs = 0.0)Bytes do PDF convertido, formato de origem, duração de renderização opcional.A duração de renderização é 0.0 quando ela não é medida.GotenbergConvertResultnenhum esperado.Retornado por GotenbergResponseParser::parse().
GotenbergConvertResult::isValid()nenhum.Válido quando os bytes do PDF convertido não estão vazios e parecem dados de PDF.boolnenhum esperado.Verifique antes de persistir ou transmitir o resultado.
GotenbergConvertResult::size()nenhum.Conta os bytes do PDF convertido.intnenhum esperado.Use-o para cotas, telemetria e limites de resposta.

Esta tabela cobre o enum OfficeFormat. Use-o para mapear uma extensão para um formato, ler o tipo MIME de upload ou verificar quais seis formatos são suportados.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comNotas
OfficeFormat::fromExtension(string $ext)Extensão de arquivo com ou sem ponto inicial.Faz a correspondência sem diferenciar maiúsculas de minúsculas.OfficeFormatValueError para extensão não suportada.Valores suportados: docx, xlsx, pptx, odt, ods, odp.
OfficeFormat::mimeType()nenhum.Mapeia o caso do enum para o tipo MIME de upload.stringnenhum esperado.Usado na parte de arquivo do multipart.
OfficeFormat::extension()nenhum.Retorna o valor associado.stringnenhum esperado.Útil em diagnósticos e nomes de arquivos.

Esta tabela cobre a infraestrutura interna que a ponte aciona para você. Use-a apenas quando você escrever transporte personalizado, fizer uma chamada Hypertext Transfer Protocol (HTTP) personalizada que ainda precise da análise do pacote ou inspecionar o comportamento de segurança e pinning de baixo nível.

SímboloParâmetrosComportamento padrãoRetornaLança ou falha comNotas
GotenbergSecurityPolicy::validateApiUrl(string $url)URL base da API.Analisa e valida o destino antes de qualquer operação de rede.arrayRuntimeException para URLs inseguras ou inválidas.Mantém erros de endpoint do tipo server-side request forgery (SSRF) fora do código de conversão.
GotenbergSecurityPolicy::assertPinsStillValid(string $host, array $pinnedIps)Host e lista de Internet Protocol (IP) com pinning.Verifica as expectativas de pin de Domain Name System (DNS).voidRuntimeException quando os pins estão obsoletos ou inválidos.Use-a em implantações com pinning e diagnósticos operacionais.
GotenbergSecurityPolicy::validateFileSize(int $size, int $maxSize)Tamanho real e máximo configurado.Aceita arquivos iguais ou abaixo do limite configurado.voidRuntimeException quando o arquivo é grande demais.Aplique antes da construção da requisição.
GotenbergSecurityPolicy::validateFileName(string $name)Nome de arquivo original.Rejeita formas de nome de arquivo inseguras ou não suportadas.voidRuntimeException para nomes inválidos.Evita nomes de arquivo multipart malformados.
GotenbergResponseParser::parse(ResponseInterface $response, OfficeFormat $format)Resposta PSR-7 e formato Office esperado.Extrai os bytes do PDF convertido de uma resposta bem-sucedida.GotenbergConvertResultGotenbergConvertException para respostas com falha ou saída PDF inválida.Analisador central para conversões de arquivo e de string.
new PinnedCurlTransport(ResponseFactoryInterface $responseFactory, StreamFactoryInterface $streamFactory, array $pinnedIps = [], array $pinnedPublicKeys = [], int $timeoutSeconds = 30)Factories PSR-17, IPs com pinning, chaves públicas com pinning, timeout.Sem pins e timeout de 30 segundos.PinnedCurlTransportnenhum esperado.Use apenas quando o pinning em nível de cURL for obrigatório.
PinnedCurlTransport::sendRequest(RequestInterface $request)Requisição PSR-7.Envia via cURL com o timeout configurado e os controles de pinning.ResponseInterfaceGotenbergConvertException em caso de falha de cURL/transporte.Use-o quando o pinning não puder ser delegado a outro cliente HTTP.
PinnedCurlTransport::buildCurlOptions(RequestInterface $request, string $host, int $port)Requisição, host e porta.Constrói o array de opções de cURL que sendRequest() usa.arrayErros de requisição inválida ou de configuração de pin.Hook de diagnóstico e teste de baixo nível.
  • Trate o Gotenberg como um limite de serviço externo. Defina deliberadamente o timeout, o tamanho, a URL e a política de pin.
  • convertFile() lê o arquivo inteiro para a memória antes de construir a requisição.
  • Registre metadados como nome do arquivo e tamanho do conteúdo, não o conteúdo do arquivo.