Ich habe eine Ruby on Rails 3.2 App mit dem wickedpdf gem und wkhtmltopdf 0.9.9 Bibliothek, um PDFs auf meiner lokalen Maschine, die eine MAC OSX 10.7.5 Lion ist zu produzieren. Die App macht erfolgreich HTML-Seiten (die SVG-Bilder enthalten) als PDF-Dateien, die das genaue Verhalten waren für die App zu erreichen. Auf lokaler, mussten wir wkhtmltopdf 0.9.9 wegen eines Bugs auf der Version 11.0.0 für OSX verwenden. Das Problem ist, dass, wenn die App auf die Produktion auf Heroku geschoben wird, es eine andere Binärdatei verwenden muss: wkhtmltopdf-0.9.9 Linux Static Binary (AMD64) und die SVG-Rendering scheint auseinander zu fallen. Es wird ein PDF erzeugt, aber die SVG-Bilder werden nicht korrekt wiedergegeben. Sie sind einfach leere oder quadratische Schalen, wo die Bilder sein sollten. Wir haben versucht, die wkhtmltopdf-Heroku Juwel, aber immer ein Broken Pipe Fehler. Es gibt keine Fehlermeldung im Zusammenhang mit diesem Problem und wir wissen nicht, wo das Problem liegt bei den Linux-Versionen. Irgendwelche Ideen da draußen Dies ist unser Code in der config / initializers / wickedpdf. rb Datei: wkhtmltoimage 0.10.0 rc2 Manual Diese Datei dokumentiert wkhtmltoimage, ein Programm, das HTML-Dokumente in Bilder konvertieren kann. Kontakt Wenn Sie Fehler erleben oder neue Funktionen anfordern möchten, besuchen Sie bitte code. google/p/wkhtmltopdf/issues/list. Wenn Sie irgendwelche Probleme oder Anmerkungen haben, fühlen Sie bitte sich frei, mit mir in Verbindung zu treten: uuf6429gmail Lizenz Copyright (C) 2010 wkhtmltopdf / wkhtmltoimage Autoren. Lizenz GPLv3: GNU GPL Version 3 oder höher gnu. org/licenses/gpl. Dieses ist freie Software: Sie sind frei, sie zu ändern und neu zu verteilen. Es gibt KEINE GARANTIE, soweit gesetzlich zulässig. Autoren Geschrieben von Jan Habermann, Christian Sciberras und Jakob Truelsen. Patches von Mehdi Abbad, Lyes Amazouz, Pascal Bach, Emmanuel Bouthenot, Benoit Garret und Mrio Silva. Synopsis Allgemeine Optionen Die markierten Felder sind nur mit gepatchten QT verfügbar. Angabe eines Proxys Standardmäßig werden Proxy-Informationen aus den Umgebungsvariablen gelesen: proxy, allproxy und httpproxy, Proxy-Optionen können auch mit dem - p-Schalter angegeben werden. Hier sind einige Beispiele (Falls Sie mit dem BNF nicht vertraut sind): Statische Version Ein Die wkhtmltopdf Website können Sie eine statische Version von wkhtmltopdf code. google/p/wkhtmltopdf/downloads/list herunterladen. Diese statische Binärdatei wird auf den meisten Systemen funktionieren und kommt mit einem eingebauten gepatchten QT. Leider ist die statische Binärdatei nicht besonders statisch, auf Linux hängt es von beiden glibc und openssl, außerdem müssen Sie einen xserver installiert haben, aber nicht notwendig ausgeführt werden. Sie müssen verschiedene Schriftarten installieren, einschließlich xfonts-scalable (Type1) und msttcorefonts. Siehe code. google/p/wkhtmltopdf/wiki/static für Mühe schreien. Zusammenstellung Es kann vorkommen, dass die statische Binärdatei nicht für Ihr System aus einem Grund oder dem anderen arbeitet, in diesem Fall müssen Sie wkhtmltoimage selbst kompilieren müssen. Installation Es gibt mehrere Möglichkeiten, wkhtmltoimage zu installieren. Sie können eine bereits kompilierte Binärdatei herunterladen, oder Sie können wkhtmltoimage selbst kompilieren. Beispiele Dieser Abschnitt enthält eine Reihe von Beispielen für das Aufrufen von wkhtmltoimage. So konvertieren Sie eine entfernte HTML-Datei in PNG: So konvertieren Sie eine lokale HTML-Datei in PNG: Speichern der erzeugten. pdf-Datei auf die Festplatte Durch Festlegen des PDFKit-save-pdf-Headers wird PDFKit in die Datei mit dem Wert von. pdf geschrieben Die Überschrift. Wird dazu führen, dass die. Pdf gespeichert werden, um path / to / gespeichert. pdf zusätzlich zu dem Client zurückgesendet werden. Wenn der Pfad nicht beschreibbar / nicht existiert, wird der Schreibvorgang schweigend fehlschlagen. Der PDFKit-save-pdf-Header wird niemals an den Client zurückgesendet. Single-Thread-Problem: In Entwicklungsumgebungen ist es üblich, einen einzelnen Server-Prozess auszuführen. Dies kann dazu führen, dass Probleme beim Rendern Ihrer PDF-Datei erfordert wkhtmltopdf auf Ihren Server wieder (für Bilder, js, css). Dies liegt daran, dass die Ressourcenanforderungen durch die anfängliche Anforderung blockiert werden und die anfängliche Anforderung auf die Ressourcenanforderungen, die einen Deadlock verursachen, wartet. Dies ist normalerweise kein Problem in einer Produktionsumgebung. Um dieses Problem zu umgehen, können Sie einen Server mit mehreren Arbeitern wie Passenger ausführen oder versuchen, Ihre Ressourcen in Ihrem HTML einzubetten, um zusätzliche HTTP-Anforderungen zu vermeiden. Beispiel Lösung (Schienen / Bündler), Einhorn hinzufügen, um die Entwicklungsgruppe in Ihrem Gemfile Edelstein Einhorn dann laufen Bundle. Als nächstes fügen Sie eine Datei config / unicorn. conf mit Dann, um die app unicornrails - c config / unicorn. conf laufen (von railsroot) Ressourcen arent im PDF enthalten: Bilder, CSS oder JavaScript scheint nicht korrekt herunterzuladen in der PDF. Dies ist aufgrund der Tatsache, dass wkhtmltopdf nicht weiß, wo diese Dateien zu finden. Stellen Sie sicher, dass Sie absolute Pfade (Start mit Schrägstrich) zu Ihren Ressourcen verwenden. Wenn Sie PDFKit verwenden, um PDFs aus einer rohen HTML-Quelle zu generieren, stellen Sie sicher, dass Sie vollständige Pfade (entweder Dateipfade oder URLs einschließlich der Domäne) verwenden. In restriktiven Serverumgebungen kann die rooturl-Konfiguration das sein, was Sie suchen, um Ihren Asset-Host zu ändern. Mangled-Ausgabe im Browser: Stellen Sie sicher, dass Ihre HTTP-Antwortheader Content-Type angeben: application / pdf Anmerkung zu Patches / Pull-Anfragen Gib das Projekt ab. Richten Sie Ihre Entwicklungsumgebung ein mit: gem install bundler bundle install Machen Sie Ihre Funktion zusätzlich oder Fehlerbehebung. Fügen Sie Tests für sie hinzu. Dieses ist wichtig, also breche ich es nicht in einer zukünftigen Version unabsichtlich. Commit, verwirren Sie nicht mit rakefile, Version oder Geschichte. (Wenn Sie Ihre eigene Version haben möchten, ist das fein, aber Bump-Version in einem Commit selbst kann ich ignorieren, wenn ich ziehen) Senden Sie mir eine Pull-Anfrage. Bonuspunkte für Themenzweige. Urheberrecht (c) 2010 Jared Pace. Siehe LIZENZ für Details. Erforderliches Panopto-Update Am 29. Juli erfordert Panopto, dass alle Recorder auf Version 5.1 oder 5.2 aktualisiert werden müssen. Sie werden aufgefordert, Ihren Rekorder an diesem Datum zu aktualisieren, und wird nicht in der Lage sein, Panopto zu verwenden, bis Ihre Version auf 5.1 oder 5.2 aktualisiert wird. Wenn Sie derzeit einen Maryville-Computer verwenden, wenden Sie sich an den Help Desk, um das Update abzuschließen. Auch wenn Panopto noch verfügbar ist, empfehlen wir die Nutzung unserer neuen Video-Plattform Kaltura. Für zukünftige Videoaufnahmen. Referenzen Bitte kontaktieren Sie LDT mit Fragen. Ein PDF-Generierungs-Plugin für Ruby on Rails Wicked PDF verwendet das Shell-Dienstprogramm wkhtmltopdf, um eine PDF-Datei an einen Benutzer aus HTML zu dienen. Mit anderen Worten, anstatt sich mit einer PDF-Generierung von DSL irgendeiner Art, schreiben Sie einfach eine HTML-Ansicht, wie Sie es normalerweise, dann lassen Wicked PDF kümmern sich um die harten Sachen. Wicked PDF wurde überprüft, um an Ruby-Versionen 1.8.7 bis 2.3 Rails 2 bis 5.0 zu arbeiten. Fügen Sie dies zu Ihrem Gemfile hinzu und führen Sie Bundle-Installation durch: Erstellen Sie dann den Initialisierer mit Möglicherweise müssen Sie zu config / initializers / mimetypes. rb auch älter hinzufügen Versionen von Rails. Denn wickedpdf ist ein Wrapper für wkhtmltopdf. Youll Notwendigkeit, das zu installieren, auch. Die einfachste Weise, alle Binaries (Linux, OSX, Windows) zu installieren, ist durch das Edelstein wkhtmltopdf-binary. Um dies zu installieren, fügen Sie ein zweites Juwel hinzu. Dieser Wrapper kann in Versionen zu verfolgen, im Moment es wickelt die 0,9-Version von wkhtmltopdf, während es 0.12-Version zur Verfügung. Einige der oben aufgeführten erweiterten Optionen sind mit 0.9 nicht verfügbar. Wenn Ihre wkhtmltopdf-Datei nicht auf Ihrem Webserver-Pfad ist, können Sie sie in einem Initialisierer konfigurieren: Weitere Informationen über wkhtmltopdf. Siehe die Projekthomepage. Benutzungsbedingungen - Wichtig Die wkhtmltopdf-Binärdatei wird außerhalb Ihrer Rails-Anwendung ausgeführt, daher werden Ihre normalen Layouts nicht funktionieren. Wenn Sie CSS-, JavaScript - oder Bilddateien verwenden möchten, müssen Sie das Layout so ändern, dass Sie einen absoluten Verweis auf diese Dateien erhalten. Die beste Option für Rails ohne die Asset-Pipeline ist, den wickedpdfstylesheetlinktag zu verwenden. Wickedpdfimagetag. Und wickedpdfjavascriptincludetag Helfer oder gehen Sie direkt zu einem CDN (Content Delivery Network) für beliebte Bibliotheken wie jQuery. Verwenden von wickedpdfhelpers mit Asset-Pipeline-Erhöhungen Assetnamen, die an Helfer übergeben werden, sollten das / assets / prefix nicht enthalten. Fehler. Um dies zu umgehen, können Sie wickedpdfassetbase64 mit den normalen Rails-Helfern verwenden, aber beachten Sie, dass diese Base64 Ihren Inhalt kodiert und inline auf der Seite kodiert. Dies ist sehr schnell für kleine Vermögenswerte, aber große können eine lange Zeit dauern. In diesem Fall können Sie diese Standard-Rails-Helfer verwenden und auf die aktuelle CDN für das Framework, das Sie verwenden, verweisen. Für jQuery, würde es so etwas aussehen, angesichts der aktuellen Versionen zum Zeitpunkt des Schreibens. Verwendung der Asset-Pipeline Der Weg für die Asset-Pipeline auf Heroku ist, diese Dateien in Ihre Asset-Precompiler-Liste aufzunehmen, wie folgt: Erweiterte Verwendung mit allen verfügbaren Optionen Standardmäßig wird sie ohne Layout (Layout: false) Vorlage für den aktuellen Controller und Aktion. Wkhtmltopdf Binäre Optionen Einige der obigen Optionen werden an wkhtmltopdf binary übergeben. Sie können verwendet werden, um die im Webkit-Rendering verwendeten Optionen zu steuern, bevor Sie das PDF erstellen. Beispiele für diese Optionen sind: Sie können die vollständige Liste der Optionen unter Globale Optionen in wkhtmltopdf verwenden Dokumente anzeigen. Super Advanced Usage Wenn Sie nur ein pdf erstellen und es nicht anzeigen möchten: Wenn Sie utf codierte Zeichen anzeigen müssen, fügen Sie dieses zu Ihren PDF-Ansichten oder Layouts hinzu: Jetzt können Sie ein Debugparam auf der URL verwenden, die Ihnen den Inhalt zeigt Das pdf in einfachem HTML, um es schneller zu entwerfen. Zuerst müssen Sie den Renderparameter showashtml: params. key (debug) konfigurieren und dann einfach so verwenden, wie Sie es normalerweise tun würden, aber füge Debug als GET param in die URL ein: Die wickedpdf Helfer verwenden jedoch file: /// paths Für Vermögenswerte, wenn mit: showashtml, und Ihr Browser domänenübergreifende Sicherheitsfunktion wird Kick in, und nicht rendern. Um dies zu umgehen, können Sie Ihre Assets wie in Ihre Vorlagen laden: Wenn ein Bild aus Ihrem HTML nicht gefunden werden kann (relativer oder falscher Pfad für ie), werden andere Bilder mit richtigen Pfaden möglicherweise auch nicht in der Ausgabe PDF angezeigt ( Es scheint ein Problem mit wkhtmltopdf zu sein). Sie haben vielleicht bemerkt: Dieses Plugin ist stark von der PrinceXML-Plugin fürstlich inspiriert. PrinceXMLs Kosten war prohibitiv für mich. Also, mit ein wenig Hilfe von einigen Freunden (danke jqr), verfolgte ich wkhtmltopdf, und hier sind wir. Führen Sie die Test-Suite und überprüfen Sie die Ausgabe (Rake) Fügen Sie Tests für Ihre Funktion oder Fix (Bitte) Commit Ihre Änderungen (git commit - am Fügen Sie einige Funktion) Push auf den Zweig (git push origin my-new-feature) Neue Pull-Anfrage erstellen Auch dank unixmonkey. Galdomedia. Jcrisp Lleirborras. Tiennou Und alle anderen für all ihre harte Arbeit und Geduld mit meinen Verzögerungen in der Verschmelzung in ihren Verbesserungen.
No comments:
Post a Comment