elzobrito / olivia-pdf
PDF library based on FPDF with Olivia extensions
Requires
- php: ^7.1 || ^8.0
- fpdf/fpdf: ^1.82
README
Fork do FPDF com extensões voltadas para geração de PDFs em PHP, incluindo cabeçalho customizado, rodapé com autenticação, tabelas simples, HTML básico e texto rotacionado.
Requisitos
- PHP
^7.1 || ^8.0 - Composer
Instalação
Se o pacote estiver publicado no Composer:
composer require elzobrito/olivia-pdf
Se o projeto estiver sendo usado localmente, basta manter o autoload do Composer ativo:
require __DIR__ . '/vendor/autoload.php';
Namespace
use Oliviapdf\Pdf;
O que este fork adiciona
Além dos recursos originais do FPDF, a classe Oliviapdf\Pdf inclui:
Circle()eEllipse()para desenho de formasSetWidths(),SetAligns()eRow()para tabelas simples com quebra automáticaWriteHTML()com suporte básico a tags HTMLTextWithDirection()eTextWithRotation()para texto orientado ou rotacionadoHeader()com logo, título e subtítuloFooter()com paginação e código de autenticação lateral
Exemplo rápido
<?php require __DIR__ . '/vendor/autoload.php'; use Oliviapdf\Pdf; $pdf = new Pdf(); $pdf->AliasNbPages(); $pdf->image_logo = __DIR__ . '/logo.png'; $pdf->title = 'Relatório de Atendimento'; $pdf->subtitle = 'Período de abril de 2026'; $pdf->autentication = 'ABC123456'; $pdf->AddPage(); $pdf->SetFont('Arial', '', 12); $pdf->WriteHTML('<p align="center"><b>Olivia PDF</b><br>Fork do FPDF com recursos extras.</p>'); $pdf->Ln(8); $pdf->SetWidths([50, 80, 50]); $pdf->SetAligns(['L', 'L', 'C']); $pdf->Row(['Nome', 'Descrição', 'Status']); $pdf->Row(['Olivia', 'Documento gerado com tabela automática', 'OK']); $pdf->Row(['Sistema', 'Linha com quebra automática para textos maiores dentro da célula', 'ATIVO']); $pdf->Ln(10); $pdf->Circle(20, 90, 5); $pdf->TextWithRotation(30, 100, 'Texto rotacionado', 45); $pdf->Output('I', 'exemplo.pdf');
Cabeçalho e rodapé
O cabeçalho e o rodapé são acionados automaticamente ao usar AddPage().
Propriedades disponíveis
$image_logo: caminho da imagem exibida no topo$title: título centralizado no cabeçalho$title_config_array: configuração da fonte do título no formato['Arial', 'B', 10]$subtitle: subtítulo abaixo do título$subtitle_config_array: configuração da fonte do subtítulo no formato['Arial', '', 9]$autentication: texto exibido lateralmente no rodapé$end_page: sufixo da paginação, por padrão/{nb}
Exemplo
$pdf->AliasNbPages(); $pdf->image_logo = __DIR__ . '/logo.png'; $pdf->title = 'Meu Documento'; $pdf->title_config_array = ['Arial', 'B', 12]; $pdf->subtitle = 'Subtítulo do relatório'; $pdf->subtitle_config_array = ['Arial', '', 10]; $pdf->autentication = 'TOKEN-001';
Tabelas com Row()
Antes de chamar Row(), defina a largura das colunas com SetWidths() e, se quiser, o alinhamento com SetAligns().
$pdf->SetFont('Arial', '', 10); $pdf->SetWidths([40, 100, 40]); $pdf->SetAligns(['L', 'L', 'C']); $pdf->Row(['Código', 'Descrição', 'Valor']); $pdf->Row(['001', 'Item com descrição longa e quebra automática dentro da célula', 'R$ 10,00']);
Observações
Row()usaMultiCell()internamente- a altura da linha é calculada automaticamente
- se faltar espaço na página, ocorre quebra automática
- se nenhuma fonte tiver sido definida com
SetFont(), a classe lança erro
HTML suportado em WriteHTML()
O parser é propositalmente simples. Ele atende textos rápidos, mas não substitui um renderizador HTML completo.
Tags suportadas
<b>,<i>,<u><a href="..."><br><p align="center"><hr>
Exemplo
$pdf->SetFont('Arial', '', 12); $pdf->WriteHTML('<b>Negrito</b> <i>itálico</i> <u>sublinhado</u><br>'); $pdf->WriteHTML('<a href="https://example.com">Abrir link</a>');
Métodos extras
Circle(float $x, float $y, float $r, string $style = 'D')
Desenha um círculo.
Ellipse(float $x, float $y, float $rx, float $ry, string $style = 'D')
Desenha uma elipse.
TextWithDirection(float $x, float $y, string $txt, string $direction = 'R')
Escreve texto nas direções:
R: esquerda para direitaL: direita para esquerdaU: de baixo para cimaD: de cima para baixo
TextWithRotation(float $x, float $y, string $txt, float $txt_angle, float $font_angle = 0)
Escreve texto rotacionado em qualquer ângulo.
Compatibilidade e observações
- A classe continua herdando de
Fpdf\Fpdf - O texto é convertido para
windows-1252internamente para manter compatibilidade com o fluxo tradicional do FPDF - Para recursos avançados de Unicode, layout complexo ou HTML/CSS completo, pode ser necessário adotar uma biblioteca com suporte mais amplo
Desenvolvimento
Validações úteis durante manutenção:
composer validate --no-check-publish php -l src/Pdf.php
Licença
Este projeto é distribuído sob a licença MIT. O FPDF mantém sua licença própria no pacote original.