ColdFusionでCFDOCUMENTを使用するのと同様に、HTMLを取得してPDFに変換する最良かつ最も簡単な方法は何ですか?
PDATE:これまでに人々から寄せられたすべてのコメントと提案に感謝しますが、答えを残した人々はポイントを失っていると感じています。
1)ソリューションは無料またはオープンソースでなければなりません。 1人はpricexmlを使用し、もう1人はpd4mlを使用することを提案しました。これらのソリューションはどちらもお金がかかります(pricexmlには腕と脚がかかります)。
2)htmlを(ファイル、url、または文字列変数から)取り込み、pdfを生成できる必要があります。エビ、rprf、rtexなどのライブラリは、htmlを取り込まずに独自のメソッドを使用して生成されます。
提案に感謝しているとは思わないでください。ColdFusionを使用しているがRailsに変換したい人にとっては、pdf生成は本当に問題のように思えます。
Gem WickedPDF は、exactlyを行います。
今日の最大のことは、この仕事のためのPDFKitです。
WickedPDFを試す 、PDFジェネレーター(HTMLから))プラグイン。
ここに例があります
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
#wicked_pdf is a wrapper for wkhtmltopdf, you'll need to install that, too
あなたのコントローラーで(私はあなたが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
ビューでPDFリンク
= link_to 'Download Pdf', you_show_path(@uour_object, format: :pdf)
PDFを電子メールの添付ファイルで送信する場合は、まずPDFファイルをパブリックフォルダーまたは一時フォルダーに保存してから、メーラークラスに保存します(例:mailers/e_mailer.rb)
attachments["test.pdf"] = File.read(Rails.root.join('public',"test.pdf"))
mail(:to => to, :cc => cc , :subject => "subject")
メールを送信した後、ファイルを削除できます
File.delete(Rails.root.join("public", "test.pdf"))
私はこの質問がこの時点でほぼ5歳であることを知っています。ただし、新しいオプションが利用可能です。
エビをお試しください! https://github.com/adeven/shrimp
大量の汗と涙を流した後、かなりシンプルなRails= TinyMce を使用してユーザーがレターテンプレートを作成できるアプリを作成できました。 PDFドキュメントとして表示できます。
Wysiwygエディターのオプションを可能な限り制限することにしました。オプションのいくつかは期待どおりに動作しませんが、必要に応じてgsub-ingで解決できないものはありません。
必要なHTMLDOCをラップするRuby gemがあります。 PDF :: HTMLDoc
それが得られたら、MIMEタイプを登録して、次のようなことができます。
@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
アプリケーションコントローラーで、render_to_pdfメソッドを次のように追加しました。
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
Travis Bealeのリンク先のHTMLDOCサイトには、さらにドキュメントがあります。これがあなたの道を進むのを助け、あなたの文書が本当に複雑でなければ、それで十分であることを願っています。乗車方法をお知らせください。
これに対する「解決策」として私が見つけた最も近いものは、JRubyを使用してから The Flying Saucer Project を使用することです。私はそれがRubyに移植されることを望んでいるので、それはネイティブな解決策になり得ます。
プロジェクトは停滞しているかもしれませんが、ピサ(別名 XHTML2PDF )はPython libで、CSS + HTMLからPDFへの変換を行います。 Railsアプリをコマンドラインツールとして駆動することでしばらく前に-かなりうまくいきました。
PDF https://grabz.it による解決策へのHTMLをお勧めします。
これらは非常に柔軟で使いやすいスクリーンショットAPIを備えており、どのタイプのRubyアプリケーションでも使用できます。
試してみたい場合は、最初に認証 アプリキー+シークレット および 開発無料SDK を取得する必要があります
次に、アプリでの実装手順は次のとおりです。
//initialization
require 'grabzit'
grabzItClient = GrabzIt::Client.new("APPLICATION KEY", "APPLICATION SECRET")
//capturing the url to PDF
grabzItClient.url_to_pdf("http://www.google.com")
次は保存です。 2つの保存方法のいずれかを使用できます。アクセス可能なコールバックハンドルが利用可能な場合はsave
:
grabzItClient.save("http://www.example.com/handler/index")
そしてsave_to
同期保存が必要な場合(スクリーンショットの作成中にアプリケーションを待機させる):
filepath = "images/result.jpg"
grabzItClient.save_to(filepath)
保存について details のドキュメントを確認してください。
それで全部です。 image screenshots など、他の種類のスクリーンショットを取得することもできます。