Hier möchte ich die wichtigsten Schritte festhalten, um mit dem sehr tollen wicked_pdf plugin PDF Dateien zu erstellen. Dabei soll vor allem die Integrierung von Bilddateien beschrieben werden, die ich mit dem on-the-fly processing/encoding framework dragonfly erzeuge.
Plugin installieren
1 2 | |
Statische Version von wkhtmltopdf herunterladen und in neu angelegten Rails Ordner “bin” legen
1 2 3 | |
Neuen Initializer in der config für wicked_pdf erstellen mit folgendem Inhalt:
1 2 3 4 5 6 | |
Den exe_path müsst ihr auf den Namen eurer geladenen wkhtmltopdf-Datei anpassen. Bei mir ist es “wkhtmltopdf-i386”.
In eurem Controller gibt ihr dann an, welche Action auf PDF antworten soll. Die möglichen Optionen findet ihr hier
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
View show.pdf.erb anlegen
1 2 | |
In diesem View könnt ihr jetzt ganz normales HTML schreiben, das mit dem entsprechenden Styling für die PDF formatiert wird.
GANZ wichtig:
- Alle Resourcen, auf die innerhalb des Views verwiesen wird, müssen eine absolute url aufweisen. Dafür könnt ihr die von wicked_pdf zur Verfügung gestellten Helper verwenden. Sie setzen ein “file://” und den Hauptpfad der Railsapp vor jede Url
- Bei generierten Dateien (generiertes Javascript, Css oder Bilder ) könnnen diese Helper natürlich nicht verwendet werden
- Hier muss im View selbstständig die eine absolute Url erzeugt werden: Wie dies geht, erfahrt ihr jetzt
Absolute URL’s erzeugen
Es gibt zwei Möglichkeiten, die Urls der verwendeten AssetHelper von Rails absolut zu gestalten:
1
In eurer Enviromentkonfiguration (development.rb, production.rb, test.rb) könnt ihr asset hosts festlegen
1
| |
Dies kann aber bei größeren Projekten leicht zu Problemen führen, wenn man mehrere asset hosts verwendet (ist aber mit entsprechendem Aufwand möglich).
2
Ich lasse mir im entsprechenden View alle Angaben zum Request ausgeben und erzeuge daraus die absoluten Url’s. Dies funktioniert vor allem in Verbindung mit Dragonfly perfekt:
1 2 3 4 | |
Alternativ kann auch eine Option von Dragonfly genutzt werden, bei dem der Host festgelegt werden kann:
1 2 | |
Wenn ihr in eurer Testumgebung aber immer noch keine generierten Bilder in der PDF vorfindet oder die PDF Generierung von wkhtmltopdf endlos weiterläuft, müsst ihr in eurer “development.rb” Datei noch folgendes setzen.
1
| |
Ich hoffe, ich konnte euch weiterhelfen
Bis zum nächsten Mal