Quel est le moyen le plus simple et le plus simple de convertir HTML en HTML, de manière similaire à l'utilisation de CFDOCUMENT sur ColdFusion?
MISE À JOUR: J'apprécie vraiment tous les commentaires et suggestions que les gens ont formulés jusqu'à présent, mais j'estime que les personnes qui laissent leurs réponses manquent le point.
1) la solution doit être libre ou ouverte. Une personne a suggéré d'utiliser pricexml et l'autre pd4ml. Ces deux solutions coûtent de l'argent (pricexml coûte un bras et une jambe) que je ne suis pas sur la fourchette.
2) ils doivent être capables de prendre en HTML (à partir d’un fichier, d’une URL ou d’une variable chaîne) et de produire ensuite le pdf. Les bibliothèques telles que prawn, rprf, rtex sont produites en utilisant leurs propres méthodes et en ne prenant pas le langage HTML.
s'il vous plaît, ne pensez pas que je suis ingrat pour les suggestions, c'est simplement que la génération pdf semble être un réel problème pour les personnes comme moi qui utilisent ColdFusion mais souhaitent se convertir à Rails.
Le bijou, WickedPDF , fait exactement cela.
La meilleure chose à l’heure actuelle est PDFKit pour ce travail:
Essayez WickedPDF , PDF générateur (à partir de HTML) plugin.
Voici un exemple
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
#wicked_pdf is a wrapper for wkhtmltopdf, you'll need to install that, too
Dans votre contrôleur (je suppose que vous êtes dans la méthode show):
respond_to do |format|
format.html
format.pdf do
pdf = render_to_string :pdf => 'test',
layout: 'pdf.html.erb',
template: 'show.pdf.slim',
header: { :right => '[page] of [topage]'},
margin: {top: 0,
bottom: 0,
left: 0,
right: 0},
outline: {outline: true,
outline_depth: 2}
end
end
A votre avis pour PDF link
= link_to 'Download Pdf', you_show_path(@uour_object, format: :pdf)
Si vous souhaitez envoyer un fichier PDF en pièce jointe à un e-mail, enregistrez d'abord votre fichier pdf dans un dossier public ou temporaire, puis dans la classe mailer (par exemple, dans mailers/e_mailer.rb)
attachments["test.pdf"] = File.read(Rails.root.join('public',"test.pdf"))
mail(:to => to, :cc => cc , :subject => "subject")
Après avoir envoyé un email, vous pouvez supprimer le fichier
File.delete(Rails.root.join("public", "test.pdf"))
Je sais que cette question a presque 5 ans à ce stade. Cependant, de nouvelles options sont disponibles.
Essayez les crevettes! https://github.com/adeven/shrimp
Après beaucoup de sueur et de larmes, j'ai réussi à écrire une application Rails assez simple qui permet à l'utilisateur d'écrire des modèles de lettre via TinyMce , ceux-ci sont ensuite enregistrés et peuvent être visualisés sous forme de documents pdf.
J'ai décidé de limiter autant que possible les options dans l'éditeur wysiwyg, car certaines options ne fonctionnent pas exactement comme prévu, mais rien de plus qu'un petit problème ne pourrait résoudre si nécessaire.
Il existe un bijou Ruby qui englobe HTMLDOC dont vous aurez besoin: PDF :: HTMLDoc
Une fois que vous avez cela, enregistrez le type mime, vous pouvez alors faire quelque chose comme:
@letter_template = LetterTemplate.find(params[:id])
respond_to do |format|
format.html
format.pdf { send_data render_to_pdf({:action => 'show.rpdf', :layout => 'pdf_report'}), :filename => @letter_template.name + ".pdf", :disposition => 'inline' }
end
Dans le contrôleur d'application, j'ai ajouté la méthode render_to_pdf comme ceci:
def render_to_pdf(options =nil)
data = render_to_string(options)
pdf = PDF::HTMLDoc.new
pdf.set_option :bodycolor, :white
pdf.set_option :toc, false
pdf.set_option :portrait, true
pdf.set_option :links, false
pdf.set_option :webpage, true
pdf.set_option :left, '2cm'
pdf.set_option :right, '2cm'
pdf.set_option :footer, "../"
pdf.set_option :header, "..."
pdf.set_option :bottom, '2cm'
pdf.set_option :top, '2cm'
pdf << data
pdf.generate
end
Vous trouverez plus de documentation sur le site HTMLDOC à laquelle Travis Beale est lié. J'espère que cela vous aidera à vous mettre en route et que si vos documents sont vraiment compliqués, cela devrait suffire. Fais nous savoir comment tu reussis.
La solution la plus proche que j'ai trouvée est d'utiliser JRuby, puis The Flying Saucer Project . Je souhaite juste que cela soit porté sur Ruby afin que ce soit une solution native. Dieu, j'aimerais être meilleur à Java.
Le projet a peut-être stagné, mais Pisa (alias XHTML2PDF ) est une lib Python qui gère CSS + HTML en PDF. utilisé dans une application Rails (à faible trafic) il y a longtemps en utilisant l'outil de ligne de commande - fonctionnait plutôt bien.
Je voudrais vous suggérer le HTML à la solution PDF par https://grabz.it .
Ils ont une API de capture d'écran très flexible et simple à utiliser qui peut être utilisée par tout type d'application Ruby.
Si vous voulez l'essayer, vous devez d'abord obtenir l'autorisation clé de l'application + secret et le SDK sans développement
Ensuite, dans votre application, les étapes de mise en œuvre seraient les suivantes:
//initialization
require 'grabzit'
grabzItClient = GrabzIt::Client.new("APPLICATION KEY", "APPLICATION SECRET")
//capturing the url to PDF
grabzItClient.url_to_pdf("http://www.google.com")
Suivant est la sauvegarde. Vous pouvez utiliser l'une des deux méthodes de sauvegarde, save
si le descripteur de rappel accessible est disponible:
grabzItClient.save("http://www.example.com/handler/index")
Et save_to
si vous avez besoin d'une sauvegarde synchrone (ce qui obligera votre application à attendre pendant la création de la capture d'écran):
filepath = "images/result.jpg"
grabzItClient.save_to(filepath)
Consultez la documentation pour détails à propos de la sauvegarde.
C'est tout. Il est également possible d’obtenir d’autres types de captures d’écran, telles que captures d’image .