HTML zu PDF · Ruby
HTML zu PDF mit Ruby und Grover
Grover ist eine Ruby-Bibliothek, die ueber eine Node-Bruecke Puppeteer und Chromium ansteuert. Damit bringt sie die volle Browser-Treue in Ruby- und Rails-Anwendungen und wandelt HTML-Strings oder URLs in PDF-Bytes um.
Code-Beispiel
require "grover"
html = "<h1>Beleg</h1><p>Summe: 49,90 Euro</p>"
grover = Grover.new(html, format: "A4",
print_background: true,
margin: { top: "20mm", bottom: "20mm" })
pdf = grover.to_pdf
File.binwrite("beleg.pdf", pdf) Hinweise
Grover schlaegt die Bruecke zwischen Ruby und Puppeteer. Da im Hintergrund Chromium ueber Node laeuft, erbt Grover dessen vollstaendige CSS-Unterstuetzung: Flexbox, Grid, Webfonts, SVG und JavaScript-gerenderte Inhalte werden korrekt verarbeitet. Voraussetzung ist eine installierte Node-Umgebung samt Puppeteer, da Grover diese Werkzeuge aufruft. In Rails laesst sich Grover bequem mit erblichen Views kombinieren: Man rendert ein Template zu HTML und uebergibt das Ergebnis an Grover.new. Die Optionen entsprechen weitgehend den Puppeteer-PDF-Optionen, etwa format, print_background, margin sowie display_header_footer mit Templates fuer Seitenzahlen. Auch Optionen fuer Viewport und Warten auf Netzwerkleerlauf werden durchgereicht. Der Kompromiss ist die zusaetzliche Node-Abhaengigkeit neben Ruby, was die Deployment-Umgebung etwas schwerer macht. Wer in Ruby pixelgenaue, modern gestaltete PDFs braucht und die Node-Bruecke akzeptiert, erhaelt mit Grover Browser-Qualitaet ohne den Umweg ueber ein separates Microservice.
FAQ
Häufige Fragen
Braucht Grover Node neben Ruby?
Ja. Grover ruft Puppeteer ueber eine Node-Bruecke auf. Node und das Puppeteer-Paket muessen in der Umgebung installiert sein, damit Chromium gestartet werden kann.
Wie binde ich Grover in Rails ein?
Rendere zuerst dein View-Template zu einem HTML-String, etwa mit render_to_string, und uebergib diesen an Grover.new. Das Ergebnis von to_pdf sendest du als Datei aus.
Ohne Code geht es auch: Der HTML-zu-PDF-Converter wandelt direkt im Browser um, ohne Installation und ohne Upload.