Back-End

15 mar, 2019

Salvando PDFs a partir de qualquer URL com WkhtmltoPdF e PHP

Publicidade

Fala pessoal, tudo bom? Trazendo mais uma vez aqui uma biblioteca muito interessante para se trabalhar no dia a dia com PHP. Um dia desses no slack do PHPSP perguntaram uma maneira legal de se gerar PDF.Pesquisando achei um projeto legal: https://github.com/mikehaertl/phpwkhtmltopdf. Ele utiliza por trás o wkhtmltopdf e consegue gerar pdfs a partir de qualquer html, inclusive de sites aleatórios.

Vamos ver como isso funciona na prática. Para isso, vamos instalar o mikehaertl/phpwkhtmltopdf na nossa pasta pdf

composer require mikehaertl/phpwkhtmltopdf

Feito isso, você deverá fazer a instalação do wkhtmltopdf no site oficial. Você deverá obter o caminho onde foi salvo o wkhtmltopdf.

Agora, vamos ao código.

Vamos gerar um pdf do site do Google por exemplo, salvando ele como google.pdf:

<?php

require_once 'vendor/autoload.php'; // carregando o autoload

use mikehaertl\wkhtmlto\Pdf; //instanciando a classe de Pdf

$binary = 'c:/wkhtmltopdf/bin/wkhtmltopdf.exe'; //definindo o caminho do binário

$pdf = new Pdf('https://google.com'); //definindo qual a URL a ser transformada em PDF

$pdf->binary = $binary; //setando o binário

if (!$pdf->saveAs('google.pdf')) { //salvando como google.pdf e verificando erros
    $error = $pdf->getError();
    print($error);
}

Executando geramos o seguinte PDF:

Podemos também fazer composições com mais páginas:

<?php

require_once 'vendor/autoload.php'; // carregando o autoload

use mikehaertl\wkhtmlto\Pdf; //instanciando a classe de Pdf

$binary = 'c:/wkhtmltopdf/bin/wkhtmltopdf.exe'; //definindo o caminho do binário

$pdf = new Pdf;

$pdf->addPage('https://google.com'); //definindo qual a URL a ser transformada em PDF
$pdf->addPage('https://github.com'); //definindo qual a URL a ser transformada em PDF
$pdf->addPage('https://facebook.com'); //definindo qual a URL a ser transformada em PDF

$pdf->binary = $binary; //setando o binário

if (!$pdf->saveAs('pages.pdf')) {
    $error = $pdf->getError();
    print($error);
}

E o PDF gerado é um pouco maior:

Você pode fazer muito mais com essa biblioteca, como salvar imagens direto de sites. Compor PDFs através de código HTML, entre outros. Para isso, basta ver a documentação oficial.

Espero ter ajudado você que precisava gerar PDFs de maneira simples em PHP.