62 votes

Rails: Convertir HTML en PDF?

Quelle est la plus simple et la meilleure manière de prendre en HTML et de le convertir en PDF, similaire à l'utilisation CFDOCUMENT sur ColdFusion?

Mise à JOUR: j'ai vraiment apprécier toutes les observations et suggestions que les gens ont, à ce jour, cependant, j'ai l'impression que les gens quittent leurs réponses sont à côté de la question.

1) la solution doit être libre ou open source. une personne a suggéré d'utiliser pricexml et les autres pd4ml. ces deux solutions coûte de l'argent (pricexml coûtant un bras et une jambe) ce qui je ne suis pas sur la fourchette.

2) ils doivent être en mesure de prendre en html (à partir d'un fichier, une url ou une variable chaîne de caractères) et de produire le pdf. bibliothèques, comme la crevette, drp, rtex sont produites à partir de leurs propres méthodes et de ne pas prendre en html.

s'il vous plaît ne pense pas que je suis ingrat pour les suggestions, c'est juste que la génération de pdf semble vraiment comme un problème pour les gens comme moi qui utilisent ColdFusion, mais souhaitez convertir en Rails.

67voto

Sebastian Points 1363

le joyau WicketPDF le fait ( http://github.com/mileszs/wicked_pdf )

15voto

fl00r Points 41855

La meilleure chose à l’heure actuelle est PDFKit pour ce travail:

3voto

Michael Irey Points 1148

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

2voto

tsdbrown Points 2920

Après beaucoup de sang, de sueur et de larmes, j'ai réussi à écrire un assez simple application rails qui permet à l'utilisateur d'écrire des modèles de lettre via TinyMce, ceux-ci sont ensuite enregistrées et peuvent être considérés comme des documents pdf.

J'ai décidé de restreindre les options dans l'éditeur wysiwyg autant que possible que certaines options ne fonctionnent pas exactement comme prévu, mais c'est rien qu'un peu de gsub-ing n'arrivait pas à corriger si nécessaire.

Il y a un rubis gemme qui encapsule HTMLDOC dont vous aurez besoin: PDF::HTMLDoc

Une fois que vous avez que le, inscrire le type mime, alors vous pouvez 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 de l'application, j'ai ajouté le render_to_pdf méthode comme:

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 pourrez trouver plus de documentation sur les HTMLDOC site que Travis Beale Liés. Espérons que cette aide vous obtenez sur votre chemin à et à moins que vos documents sont vraiment compliqué, il devrait suffire. Laissez-nous savoir comment vous vous y prenez.

1voto

rip747 Points 4033

La solution la plus proche que j'ai trouvée est d'utiliser JRuby puis le projet 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X