Download the PHP package pdf-block/laravel without Composer

On this page you can find all versions of the php package pdf-block/laravel. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package laravel

pdf-block/laravel

Pacote Laravel para renderizar documentos da DSL do pdf-block em PDF nativo. Texto selecionável, links clicáveis, imagens embutidas — PDF de verdade, não screenshot.

Suporta dois drivers de renderização intercambiáveis:

Driver Como funciona Quando usar
local Chromium CLI no mesmo container que o PHP, via symfony/process Desenvolvimento e ambientes controlados
browserless HTTP POST a um serviço Browserless v2 (auto-hospedado ou gerenciado) via libcurl nativo Produção, escalabilidade horizontal, separação de responsabilidades

Instalação

O service provider é registrado automaticamente via auto-discovery do Laravel.

Publicar config (opcional)

Cria config/pdf-block.php no projeto com todas as opções disponíveis.

Publicar views (opcional)

Permite customizar os Blade templates em resources/views/vendor/pdf-block/.


Uso

Injeção de dependência

API pública


Configuração

Variáveis de ambiente

Driver local:

Driver browserless:


Driver local

O driver padrão. Invoca o binário do Chromium diretamente via symfony/process com a flag --print-to-pdf. Não requer Node.js, Puppeteer ou Browsershot.

Pré-requisitos

Chromium instalado no servidor ou container:

fonts-noto-color-emoji: necessário para renderizar emojis. Sem ela, emojis aparecem como quadrados vazios no PDF.

Dockerfile (desenvolvimento)

Produção com www-data (PHP-FPM)

O chrome_crashpad_handler usa ptrace(PTRACE_ATTACH) no processo pai do Chromium. Quando o PHP roda como www-data sem CAP_SYS_PTRACE, o kernel nega essa chamada e o Chromium recebe SIGTRAP.

Os flags --disable-crash-reporter e --disable-breakpad (já incluídos nos defaults) reduzem a frequência desse problema, mas não o eliminam em todos os builds do Chromium no Debian/Ubuntu.

Solução definitiva via setcap (requer libcap2-bin):

Alternativa recomendada para produção: use o driver browserless, onde o Chromium roda isolado em um container próprio — o problema de permissão não existe nesse contexto.


Driver browserless

Envia o HTML via POST /pdf para qualquer serviço compatível com a API Browserless v2. Elimina o Chromium do container PHP por completo.

O driver é implementado sobre libcurl nativo (ext-curl) — sem Guzzle. Motivos:

O HTML gerado pelo Blade já carrega toda a lógica de dimensionamento: um script injeta @page { size: Wmm Hmm; margin: 0 } via beforeprint, medindo o scrollHeight real após fontes e imagens carregadas. O driver envia preferCSSPageSize: true para que o Puppeteer obedeça esse @page — tamanho, margens e orientação vêm direto da DSL via CSS, sem duplicação no JSON da requisição.

Otimizações ativas por padrão

Otimização Efeito
waitUntil: 'load' Fontes são 100% locais (fontconfig), imagens já são aguardadas pelo load. Usar networkidle0 só é necessário se o template dispara XHR/fetch após o load.
preferCSSPageSize: true Tamanho do papel lido do @page do HTML — evita duplicar config na request.
rejectResourceTypes Cancela media, websocket, eventsource, manifest, texttrack, other antes da rede.
rejectRequestPattern Bloqueia trackers conhecidos (Google Analytics, GTM, DoubleClick, Facebook Pixel, Hotjar, Mixpanel, Segment, FullStory, Clarity).
CURLOPT_TCP_NODELAY Desliga Nagle — request chega ao Browserless sem o delay de 40 ms.
Expect: header removido Evita handshake 100-continue que alguns proxies travam.
HTTP/1.1 forçado Garante request-line em origin-form compatível com o router do Browserless.

Docker Compose (desenvolvimento)

Budget de memória: com esse stack o pico observado é api ~50 MB + browserless ~150 MB por PDF de 1–5 páginas. Cabe confortavelmente em 400 MB totais.

DEFAULT_BLOCK_ADS=false é intencional. O ad-blocker embutido do Browserless baixa listas de filtros em background e pode travar o setContent. O bloqueio de trackers é feito no nível do driver via reject_request_pattern — mais previsível e sem dependência de DNS externo.

Serviço gerenciado (browserless.io)

Driver customizado

Implemente a interface PdfBlock\Laravel\Contracts\PdfDriver e registre o binding no seu service provider:


Fontes locais

O pacote opera com fontes 100% locais — zero tráfego para fonts.googleapis.com em runtime. A imagem Docker do Browserless (ghcr.io/uotz/pdf-block-browserless:latest) já inclui as 20 famílias curadas abaixo, instaladas no fontconfig do sistema:

Sans-serif: Inter, Roboto, Open Sans, Lato, Source Sans 3, Noto Sans, Work Sans, DM Sans, Montserrat Serif: Spectral (padrão), Merriweather, Lora, Source Serif 4, PT Serif, EB Garamond, Libre Baskerville, Playfair Display, Noto Serif Display: Oswald Mono: Roboto Mono

A lista vive em config/pdf-block.php → fonts.local_fonts e está sincronizada com o FontPicker do pacote React.

Para adicionar uma família: atualize docker/install-fonts.sh (baixa os arquivos no build), config/pdf-block.php → local_fonts e o FontPicker do React. O workflow publish-browserless.yml detecta mudanças em install-fonts.sh e rebuilda automaticamente a imagem.


Imagem Docker pronta

A imagem ghcr.io/uotz/pdf-block-browserless é a maneira recomendada de rodar o driver browserless. Ela estende ghcr.io/browserless/chromium:latest com:

Tags disponíveis:

Tag Uso
latest Última build da branch main
vX.Y.Z Vinculada ao release correspondente do pacote Composer
vX.Y Major.minor (atualiza em novos patches)

Veja docs/image-build.md para detalhes do pipeline de build e como gerar uma nova versão da imagem.


Diagnóstico

O sandbox inclui dois endpoints para validar a configuração de cada driver sem gerar um PDF completo:

Verificar driver local

Executa chromium --version e retorna:

Verificar driver browserless

Faz um request de health check ao serviço e retorna:

Em caso de erro, ambos os endpoints retornam HTTP 500/502 com "status": "error" e uma "message" descritiva.


Arquitetura

Paridade visual

Os Blade templates replicam 1:1 os renderers React. Ambos usam 100% inline styles via as mesmas funções CSS helper (portadas de TypeScript para PHP em StyleHelpers.php).


DSL — Formato do documento

O pacote espera receber a mesma DSL JSON produzida pelo editor @pdf-block/react:

Blocos suportados

Bloco Descrição
text Rich text via TipTap JSON → HTML (ueberdosis/tiptap-php)
image Imagem com alignment, objectFit, bordas
button Link estilizado como botão (clicável no PDF)
divider Linha horizontal
spacer Espaço vertical
banner Imagem de fundo com overlay e textos
table Tabela com header, zebra, bordas
qrcode QR code
chart Gráfico de barras (CSS puro)
pagebreak Quebra de página forçada

Customização de templates

Após publicar as views (--tag=pdf-block-views), edite os templates em resources/views/vendor/pdf-block/:


Integração com o editor React

Endpoint Laravel

No React


Requisitos

Licença

MIT

pdf-block/laravel

Pacote Laravel para renderizar documentos da DSL do pdf-block em PDF nativo. Texto selecionável, links clicáveis, imagens embutidas — PDF de verdade, não screenshot.

Suporta dois drivers de renderização intercambiáveis:

Driver Como funciona Quando usar
local Chromium CLI no mesmo container que o PHP Desenvolvimento e ambientes controlados
browserless HTTP POST a um serviço Browserless v1 (auto-hospedado ou gerenciado) Produção, servidores com www-data sem CAP_SYS_PTRACE

Instalação

O service provider é registrado automaticamente via auto-discovery do Laravel.

Publicar config (opcional)

Cria config/pdf-block.php no projeto com todas as opções disponíveis.

Publicar views (opcional)

Permite customizar os Blade templates em resources/views/vendor/pdf-block/.


Uso

Injeção de dependência

API pública


Configuração

Variáveis de ambiente

Driver local:

Driver browserless:


Driver local

O driver padrão. Invoca o binário do Chromium diretamente via symfony/process com a flag --print-to-pdf. Não requer Node.js, Puppeteer ou Browsershot.

Pré-requisitos

Chromium instalado no servidor ou container:

fonts-noto-color-emoji: necessário para renderizar emojis. Sem ela, emojis aparecem como quadrados vazios no PDF.

Dockerfile (desenvolvimento)

Produção com www-data (PHP-FPM)

O chrome_crashpad_handler usa ptrace(PTRACE_ATTACH) no processo pai do Chromium. Quando o PHP roda como www-data sem CAP_SYS_PTRACE, o kernel nega essa chamada e o Chromium recebe SIGTRAP.

Os flags --disable-crash-reporter e --disable-breakpad (já incluídos nos defaults) reduzem a frequência desse problema, mas não o eliminam em todos os builds do Chromium no Debian/Ubuntu.

Solução definitiva via setcap (requer libcap2-bin):

Alternativa recomendada para produção: use o driver browserless, onde o Chromium roda como root em container isolado — o problema de permissão não existe nesse contexto.


Driver browserless

Envia o HTML via POST /pdf para qualquer serviço compatível com a API Browserless v1. Elimina o Chromium do container PHP por completo.

O HTML gerado pelo Blade já carrega toda a lógica de dimensionamento: um script injeta @page { size: Wmm Hmm; margin: 0 } via beforeprint, medindo o scrollHeight real após fontes e imagens carregadas. O driver envia preferCSSPageSize: true para que o Puppeteer obedeça esse @page — tamanho, margens e orientação vêm diretamente da DSL via CSS, sem duplicação no JSON da requisição.

Docker Compose (desenvolvimento)

Serviço gerenciado (browserless.io)

Driver customizado

Implemente a interface PdfBlock\Laravel\Contracts\PdfDriver e registre o binding no seu service provider:


Diagnóstico

O sandbox inclui dois endpoints para validar a configuração de cada driver sem gerar um PDF completo:

Verificar driver local

Executa chromium --version e retorna:

Verificar driver browserless

Faz um request de health check ao serviço e retorna:

Em caso de erro, ambos os endpoints retornam HTTP 500/502 com "status": "error" e uma "message" descritiva.


Arquitetura

Paridade visual

Os Blade templates replicam 1:1 os renderers React. Ambos usam 100% inline styles via as mesmas funções CSS helper (portadas de TypeScript para PHP em StyleHelpers.php).


DSL — Formato do documento

O pacote espera receber a mesma DSL JSON produzida pelo editor @pdf-block/react:

Blocos suportados

Bloco Descrição
text Rich text via TipTap JSON → HTML (ueberdosis/tiptap-php)
image Imagem com alignment, objectFit, bordas
button Link estilizado como botão (clicável no PDF)
divider Linha horizontal
spacer Espaço vertical
banner Imagem de fundo com overlay e textos
table Tabela com header, zebra, bordas
qrcode QR code
chart Gráfico de barras (CSS puro)
pagebreak Quebra de página forçada

Customização de templates

Após publicar as views (--tag=pdf-block-views), edite os templates em resources/views/vendor/pdf-block/:


Integração com o editor React

Endpoint Laravel

No React


Migração da config anterior

Se você usava uma versão anterior do pacote, a estrutura de configuração foi alterada. Re-publique o arquivo de config e ajuste suas variáveis de ambiente:

Antes (configuração plana):

Depois (configuração por driver):

As variáveis PDF_BLOCK_CHROME_PATH e PDF_BLOCK_TIMEOUT continuam funcionando — apenas foram movidas para dentro de drivers.local.


Requisitos

Licença

MIT


All versions of laravel with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
ext-curl Version *
ext-json Version *
illuminate/http Version ^11.0|^12.0
illuminate/support Version ^11.0|^12.0
illuminate/view Version ^11.0|^12.0
symfony/process Version ^6.0|^7.0
ueberdosis/tiptap-php Version ^1.0|^2.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package pdf-block/laravel contains the following files

Loading the files please wait ...