[RUBY] [Grover] Générer un PDF avec des rails [version 2020]

Que faites-vous lors de la génération de PDF avec Rails? Un peu de recherche révèle des gemmes telles que wicked_pdf et la crevette.

Cette fois, j'ai découvert l'existence d'un bijou qui génère des PDF et des images à partir de HTML en utilisant Puppeteer / Chromium appelé grover et je l'ai essayé, donc je vais laisser une note.

procédure

Installer le marionnettiste

npm install puppeteer

Décrit dans Gemfile

gem 'grover'

Ajoutez ce qui suit à config / initializers / grover.rb.

# frozen_string_literal: true

Grover.configure do |config|
  config.options = {
    format: 'A4',
    margin: {
      top: '5px',
      bottom: '10cm'
    },
    viewport: {
      width: 640,
      height: 480
    },
    prefer_css_page_size: true,
    emulate_media: 'screen',
    cache: false,
    timeout: 0, # Timeout in ms. A value of `0` means 'no timeout'
    launch_args: ['--font-render-hinting=medium', '--lang=ja'], #Pour l'affichage japonais--lang=ajouter ja
    wait_until: 'domcontentloaded'
  }
end

Décrivez ce qui suit dans controllers / api / sample_controller.rb. N'oubliez pas de décrire le routage.

# frozen_string_literal: true

module Api
  class SampleController < ApplicationController
    include ActionController::MimeResponds #Répondre en mode API_Nécessaire pour utiliser pour

    def show
      controller = ActionController::Base.new
      html = controller.render_to_string(template: 'api/hoges/show', layout: 'pdf')
      pdf = Grover.new(html).to_pdf
      respond_to do |format|
        format.html
        format.pdf do
          send_data(pdf, filename: 'your_filename.pdf', type: 'application/pdf')
        end
      end
    end

Créer un fichier de mise en page pour la génération de pdf

views/layouts/pdf.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <style>
    </style>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

api/sample/show.html.erb

<p>Facture d'achat</p>

<style>
p { font-size: 20px; }
</style>

résultat

スクリーンショット 2020-05-30 11.48.01.png

finalement

J'ai pu facilement générer un pdf. Le temps de traitement est également un niveau qui n'a pas d'importance. Si vous incluez le marionnettiste, vous n'avez pas besoin de définir la police, donc ça a l'air bien.

Recommended Posts

[Grover] Générer un PDF avec des rails [version 2020]
[Rails 6] Erreur d'exécution avec $ rails s
Comment générer manuellement un JWT avec Knock in Rails
Manipuler le dispositif avec des rails
[Rails] Didacticiel Apprendre avec les rails
[Rails] Test avec RSpec
[Gestion des versions des rails] Rétrogradation de la version des rails
[Rails] Développement avec MySQL
Prend en charge la multilinguisme avec Rails!
Générer du JavaScript avec Thymeleaf
Générer un code à barres avec Spring Boot
Changer de version Ruby avec rbenv
[Rails] Télécharger des vidéos avec Rails (ActiveStorage)
[Vue Rails] "Hello Vue!" Affiché avec Vue + Rails
Japaneseize en utilisant i18n avec Rails
Gestion des versions Java avec SDKMAN
Générer un enregistreur de manière programmable avec connexion
Pagination de PDF avec Java + PDFBox.jar
Exécuter des rails à chaque fois dans le docker
Gestion des versions Java avec jenv
[Docker] Construction de l'environnement Rails 5.2 avec docker
Utilisez plusieurs bases de données avec Rails 6.0
[Rails] Spécifiez le format avec link_to
Gérer la version de CocoaPods avec Docker
[Docker] À utiliser à tout moment avec Docker + Rails
Rails ne peut pas générer de PDF dans l'environnement de production (EC2, Amazon Linux)
Comment créer un environnement Rails + Vue + MySQL avec Docker [dernière version 2020/09]