Como criar PDFs incríveis usando Ruby + Prawn + Gruff

Introdução 🙂

Criar PDFs para exportar dados, gerar boletos e etc é uma tarefa comum em vários sistemas e é claro que o Ruby On Rails possui várias maneiras de resolver este problema. A minha preferida é utilizando a gem Prawn porque ela te permite realizar customizações complexas de uma maneira bem simples e intuitiva.

O que vamos aprender?

Nesse tutorial eu vou abordar a criação de dois tipos de documentos em PDF, o primeiro é um contrato gerado através de alguns dados básicos como nome do cliente, descrição, valor e etc e o segundo documento vai ser um PDF com dois gráficos diferentes baseados nos dados de despesas de uma empresa.
Nós vamos aprender como usar a sintaxe básica do prawn e também como gerar gráficos incríveis usando o gruff.

INGREDIENTES
Objetivos

Criar um projeto que permita exportar os dados de duas tabelas de uma empresa em PDF.
A primeira gerando um contrato (em PDF) e a segunda um gráfico sobre as contas de uma empresa (em PDF).

Passo a Passo
  1. Criar a estrutura do Projeto
  2. Incluir os links e métodos de export
  3. Criar nossos métodos para gerar os PDFs
Mãos à Obra \o/
Parte 1 – Criando o Projeto

Primeiro vamos criar nosso projeto Rails, nossas tabelas e também dois scaffolds básicos para podermos gerenciar os dados que serão usados para gerar os PDFs.

1 – Para começar, rode no seu console o comando para gerar o projeto:

2 – Inclua no seu Gemfile o prawn e o gruff:

3 – O gruff tem como dependências os seguintes softwares, para instalar no ubuntu rode:

*Caso você esteja em outro sistema, acesse este link para instalar.

4 – Vamos instalar nossas Gems, rode:

5 – Vamos criar nossos scaffolds para poder gerenciar os dados das tabelas que usaremos pra gerar os PDFs, rode este comando para o primeiro scaffold:

E agora este para o segundo, rode:

6 – Vamos rodar nossas migrations (como estamos usando o sqlite3 não precisamos rodar o rake db:create antes)

7 – Vamos rodar o servidor e criar um novo agreement, siga os passos:

  • Rode o servidor

prawn gruff

  • Clique em “New Agreement” e preencha o formulário.
  • Agora acessando http://localhost:3000/agreements seu resultado deve ser semelhante ao da imagem a baixo:
    captura-de-tela-de-2016-11-11-17-44-00

Pronto \o/, nosso projeto foi criado, agora vamos preparar ele para exportar nossos dados.

Parte 2 – Preparando os Exports

Nesta fase nós vamos incluir no nosso projeto os botões de export e também vamos preparar nossos controllers para chamarem nosso módulo gerador de PDF quando ele estiver pronto.

1 – Vamos acrescentar as rotas para exportarmos nossas tabelas. Vá até routes.rb e substitua o conteúdo por:

2 – Vá até o arquivo “app/views/agreements/index.html.erb”, e substitua o conteúdo por:

*Note que incluímos o link para dar o export de cada agreement.

3 – Agora vá até o arquivo “app/views/spendings/index.html.erb”, e substitua o conteúdo por:

4 – Agora vá até o controller “app/controllers/agreement_controller.rb” e substitua o conteúdo dele por:

* Se você chamar o controller no browser vai quebrar porque ainda não criamos nossa módulo de export, vamos fazer isso na próxima parte.

* Note que o que incluímos foi o método export, o carregamento da lib que vamos criar e o método export no set_agreement para carregar corretamente o record. (Veja com calma os comentários no código)

5 – Agora vá até o controller “app/controllers/spending_controller.rb” e substitua o conteúdo dele por:

* Se você chamar o controller no browser vai quebrar porque ainda não criamos nossa módulo de export, vamos fazer isso na próxima parte.

* Note que o que incluímos foi o método export e o carregamento da lib que vamos criar. (Veja com calma os comentários no código)

Pronto Agora vamos para a parte divertida \o/

Parte 3 – Criando os métodos de Export

Nesta parte nós vamos criar dois métodos dentro de um módulo para gerar nossos PDFs, para fazer isso vamos criar um arquivo dentro do diretório lib e incluir nossas dependências (prawn para o PDF e gruff para gerar as imagens dos gráficos).
Eu comentei linha a linha do código para você entender o funcionamento do Prawn e Guff então, acompanhe com calma o código 🙂

  1. Crie um arquivo chamado “generate_pdf.rb” no diretório “lib” da sua aplicação.
  2. Agora copie dentro desse arquivo o seguinte código:

    Observe que temos 2 métodos dentro do módulo, o primeiro método (agreement) vai gerar nosso contrato usando os parâmetros que criarmos no scaffold de agreement usando o prawn e vai colocar o pdf criado em “public/agreement.pdf” o segundo (spending) cria o nosso PDF com dois gráficos baseados nos dados que entrarmos no scaffold de spendings usando o prawn para gerar o PDF e o gruff para gerar os gráficos (imagens) que serão incluídos dentro do PDF em “public/spending.pdf”. (Leia com calma os comentários do código acima)
  3. Agora finalmente vamos testar nossa pequena aplicação, primeiro rode o seu servidor:
  4. No browser visite http://localhost:3000/agreements
  5. Agora ao lado de um Agreement já criado via form você dever ver um link escrito “export” como na imagem a baixo:
    captura-de-tela-de-2016-11-11-21-02-29
  6. Clique nele, o PDF vai abrir em uma nova aba e o resultado deve ser semelhante a este:
    captura-de-tela-de-2016-11-11-20-44-50
  7. Agora visite http://localhost:3000/spendings
  8. Crie alguns spendings para gerar dados para o gráfico como na imagem a baixo.
    captura-de-tela-de-2016-11-11-20-48-27
  9. Agora na mesma tela (listagem de spendings) clique no link “Export to Graph”, quando você fizer isso o PDF vai se abrir na aba ao lado e a primeira página deve ser semelhante a esta:
    captura-de-tela-de-2016-11-11-20-45-54E a segunda página semelhante a está:
    captura-de-tela-de-2016-11-11-20-46-12
  10. Parabéns \o/ nós conseguimos criar um pequeno sistema que gera contratos e gráficos baseados nos dados das nossas tabelas.


12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas o/




CONCLUSÃO

Gerar PDF usando o ruby + prawn + gruff é uma tarefa muito simples e traz infinitas possibilidades, para você se aprofundar e aprender a fazer mais coisas com essas ferramentas incríveis acesse o manual do Prawn clicando aqui e o repositório do Gruff christian dating sites plenty of fish.

Como de costume o Código completo da aplicação está no Github, caso você queria clonar o código, myers briggs dating app Aproveita e me segue lá \o/

Se você ficou com dúvidas ou tem sugestões de posts para o Blog comenta aí em baixo ou me adiciona no Facebook new dating sites in canada.

Muito Obrigado,
Sua presença aqui é uma honra para mim,
Leonardo Scorza 🙂


Primeira vez no OneBitCode? Curtiu esse conteúdo?
O OneBitCode tem muito mais para você!


O OneBitCode traz conteúdos de qualidade, e em português, sobre programação com foco em Ruby on Rails e também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!

Fique por dentro de todos os conteúdos o/

 

Nossas redes sociais:

📹 • https://onebitcode.com/gay-gamers-dating/ [Live todas as terças-feiras às 19h)
💻 • https://linkedin.com/company/onebitcode
🙂 • https://facebook.com/onebitcode
 📱  • https://instagram.com/one_bit_code
🐦 • https://twitter.com/onebitcode

 

Nossos cursos:

🥇 • Programador Full Stack Javascript em 8 Semanas
💎 • Curso Completo de Ruby
 ⚙  • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec

 

Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
E
stamos aqui para você 🙂

Bem-vindo à família OneBitCode o/

0 0 votes
Article Rating
janeiro 17, 2020
Subscribe
Notify of
guest
3 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Joathan Francisco da Silva Souza

Bom dia, ótimo post, só queria ressaltar, na linha 3 do “app/views/agreements/index.html.erb”, o “end” está no lugar errado. 🙂

Railander
4 anos atrás

Top como sempre!

Feito com s2 por OneBitCode

3
0
Would love your thoughts, please comment.x
()
x
%d blogueiros gostam disto: