Função para converter HTML para PDF usando PHP e wkhtmltopdf no AWS Lambda \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 19 Horas 

 22 Min 

 42 Seg 

   Tempo restante da oferta: 19 22 42 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Função para converter HTML para PDF usando PHP e wkhtmltopdf no AWS Lambda  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Função para converter HTML para PDF usando PHP e wkhtmltopdf no AWS Lambda

 Veja nesse artigo como subir uma função para o AWS Lambda para converter HTML para PDF usando wkhtmltopdf e o PHP como linguagem base.

 [ Kennedy Tedesco ](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/06121421/html-pdf-php-lambda.png)  

Aqui na TreinaWeb sempre usamos o [wkhtmltopdf](https://wkhtmltopdf.org/) para a conversão de [HTML](https://www.treinaweb.com.br/blog/o-que-e-e-como-comecar-com-html-e-css/ "HTML") para PDF. É a base da geração dos nossos certificados, ementas, relatórios administrativos etc.

Um problema que sempre tivemos foi com o manejo do binário do wkhtmltopdf. Tínhamos que tê-lo disponível em qualquer instância EC2 que fôssemos utilizar. Quando uma nova versão era lançada, tínhamos que compilá-lo do zero novamente em todas as instâncias que o utilizassem, até mesmo localmente no ambiente de desenvolvimento. Para além disso, tínhamos com frequência alguns erros na geração do PDF por causa de algum pico de uso da CPU por conta dele.

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/10/E-BOOK-GRATUITO-HTML.jpg) ](https://www.treinaweb.com.br/ebook/guia-HTML/)

Resolvemos os nossos problemas de uma forma bem tranquila e altamente escalável usando Serverless. Fizemos o deploy de uma função no [AWS Lambda](https://www.treinaweb.com.br/blog/o-que-e-aws-lambda/ "O que é AWS Lambda?") especializada na conversão de HTML para PDF. E, para o nosso caso de uso, tudo o que precisávamos era receber o HTML e então retornar um Base64 do PDF. Notamos, também, uma melhor performance na geração dos PDFs.

Se você não conhece o que é Serverless, sugiro a leitura do artigo: [Serverless: uma introdução](https://www.treinaweb.com.br/blog/serverless-uma-introducao/).

E, para que você consiga acompanhar como o deploy da função que converte o HTML para PDF foi feito, é necessário que você tenha lido o artigo: [Aplicação Serverless desenvolvida em PHP usando AWS Lambda](https://www.treinaweb.com.br/blog/aplicacao-serverless-desenvolvida-em-php-usando-aws-lambda/).

O que utilizaremos daqui pra frente:

- **[PHP](https://www.treinaweb.com.br/blog/o-que-e-php/)**: essa maravilhosa linguagem de programação.
- **[Bref](https://bref.sh/)**: ferramenta que faz com que seja simples o deploy de aplicações PHP Serverless.
- **[Serverless Framework](https://serverless.com/)**: framework completo para teste e deploy de aplicações nas principais plataformas Serverless do mercado.
- **[AWS Lambda](https://www.treinaweb.com.br/blog/o-que-e-aws-lambda/)**: onde faremos o deploy da função.

## Como funciona a conversão do HTML para PDF?

O sistema de [layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) para o Lambda lançado pela AWS no ano passado mudou o jogo completamente. Com ele é possível que uma função use qualquer binário. É possível rodar até Cobol no AWS Lambda. E foi ele que permitiu que agora pudéssemos criar uma função que use o binário do wkhtmltopdf para a conversão de HTML para PDF. Não obstante, ele também é o responsável por podermos usar o PHP no AWS Lambda.

O que inicialmente tivemos que fazer foi compilar o wkhtmltopdf manualmente na nossa máquina para que pudéssemos criar um Layer dele no AWS Lambda pra ser linkado com a função. E, para isso, o artigo [Compiling wkhtmltopdf for use inside an AWS Lambda function with Bref is easier than you’d think](https://tech.mybuilder.com/compiling-wkhtmltopdf-aws-lambda-with-bref-easier-than-you-think/) deixou tudo bem detalhado sobre como isso pode ser feito.

O código completo da função você encontra nesse repositório: [KennedyTedesco/wkhtmltopdf-lambda-php](https://github.com/KennedyTedesco/wkhtmltopdf-lambda-php). Mas eu vou passar pelos principais pontos aqui nesse artigo.

Primeiro de tudo, vamos avaliar o arquivo `serverless.yml`:

```yaml
service: wkhtmltopdf

provider:
    name: aws
    region: sa-east-1
    runtime: provided
    stage: prod
    memorySize: 1024
    timeout: 60

plugins:
    - ./vendor/bref/bref

functions:
    html-to-base64-pdf:
        handler: index.php
        description: 'HTML to Base64 PDF'
        layers:
            - ${bref:layer.php-73}
            - 'arn:aws:lambda:sa-east-1:391960246434:layer:wkhtmltopdf-bin:1'

```

Veja em `layers` que temos declarado `arn:aws:lambda:sa-east-1:391960246434:layer:wkhtmltopdf-bin:1`, esse é o layer que compilamos manualmente e subimos para a AWS. É o layer do binário do wkhtmltopdf. É o que faz ele ficar disponível no diretório `/opt/wkhtmltopdf`.

[  ![PHP Avançado](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Curso PHP Avançado Conhecer o curso ](https://www.treinaweb.com.br/curso/php-avancado)

E a função propriamente dita é pura e simplesmente isso:

```php
