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.
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>
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