Dev (Back & Front)ARTIGO

Salvando PDFs a partir de qualquer URL com WkhtmltoPdF e PHP

Salvando PDFs a partir de qualquer URL com WkhtmltoPdF e PHP
Imagem: Rodrigo "pokemaobr" Cardoso

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.

MBA em Engenharia de Softwares Orientado para Serviços pela Metrocamp, Campinas/SP. Bacharel em Matemática Aplicada e Computacional pela Universidade Federal Rural do Rio de Janeiro, Community Manager do iMasters. Programador PHP desde 2002. Evangelista PHPSP. Desenvolve sistemas desde batalhas Pokemon em mIRC, a robôs automatizadores de tarefas.

Ver perfil