Was machen Sie beim Generieren von PDFs mit Rails? Eine kleine Recherche enthüllt Edelsteine wie wicked_pdf und Garnelen.
Dieses Mal habe ich herausgefunden, dass es ein Juwel gibt, das PDFs und Bilder aus HTML mit Puppeteer / Chromium generiert, das grover heißt, und es ausprobiert, also werde ich eine Notiz hinterlassen.
Puppenspieler installieren
npm install puppeteer
Beschrieben in Gemfile
gem 'grover'
Fügen Sie config / initializers / grover.rb Folgendes hinzu.
# 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'], #Für japanische Anzeige--lang=ja hinzufügen
wait_until: 'domcontentloaded'
}
end
Beschreiben Sie Folgendes in controller / api / sample_controller.rb. Vergessen Sie nicht, das Routing zu beschreiben.
# frozen_string_literal: true
module Api
class SampleController < ApplicationController
include ActionController::MimeResponds #Antworten Sie im API-Modus_Erforderlich, um zu verwenden
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
Erstellen Sie eine Layoutdatei für die PDF-Generierung
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>Rechnung</p>
<style>
p { font-size: 20px; }
</style>
Ich konnte leicht ein PDF erstellen. Die Verarbeitungszeit ist auch eine Ebene, die keine Rolle spielt. Wenn Sie Puppenspieler einschließen, müssen Sie die Schriftart nicht festlegen, damit sie gut aussieht.
Recommended Posts