[RUBY] [Grover] PDF mit Rails generieren [Version 2020]

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.

Verfahren

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>

Ergebnis

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

Schließlich

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

[Grover] PDF mit Rails generieren [Version 2020]
[Rails 6] Laufzeitfehler mit $ Rails s
So generieren Sie manuell ein JWT mit Knock in Rails
Gerät mit Schienen handhaben
[Rails] Lernen mit Rails Tutorial
[Schienen] Test mit RSpec
[Rails-Versionsverwaltung] Rails-Versions-Downgrade
[Rails] Entwicklung mit MySQL
Unterstützt Mehrsprachigkeit mit Rails!
Generieren Sie JavaScript mit Thymeleaf
Generieren Sie mit Spring Boot einen Barcode
Wechseln Sie die Ruby-Version mit rbenv
[Rails] Videos mit Rails hochladen (ActiveStorage)
[Vue Rails] "Hallo Vue!" Wird mit Vue + Rails angezeigt
Japanisieren Sie mit i18n mit Rails
Java-Versionsverwaltung mit SDKMAN
Programmierbar Logger mit Logback generieren
Paging PDF mit Java + PDFBox.jar
Führen Sie Rails immer im Docker aus
Java-Versionsverwaltung mit jenv
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Verwenden Sie mit Rails 6.0 mehrere Datenbanken
[Rails] Geben Sie das Format mit link_to an
Verwalten Sie die CocoaPods-Version mit Docker
[Docker] Wird immer mit Docker + Rails verwendet
Rails kann keine PDF-Dateien in Produktionsumgebungen (EC2, Amazon Linux) ausgeben.
So erstellen Sie eine Rails + Vue + MySQL-Umgebung mit Docker [neueste Version 2020/09]