12

Rails3プロジェクトからいくつかのビューをPDFとしてレンダリングできるようにする必要があります。私はこれまでRuby/RailsでPDF生成手法を使用したことがないので、PrawnPDF :: Writerなどのいくつかの一般的なアプローチを調査しましたが、これまでに見つけたすべての例と記事は古く、rails2.xにのみ適用できます。 。Rails3の実際の例はまだ見ていません。エビとエビの宝石をインストールして、このRailscastsエピソードで説明されている例を再現しようとしましたが、エビの方法が認識されないというエラーが発生します。これが実装エラーなのか、それとも単に非互換性の兆候なのかはわかりませんが、他の人がそのエビをウェブ上で共有しているのを見るとRails3では機能しなくなりました。コードをさらにトレースする必要はありませんでした。

Rails3でPDFを生成するための信頼できるソリューションを見つけた人はいますか?それを共有したり、外部のリソースやドキュメントを教えてもらえますか?本当にありがとう!

4

5 に答える 5

11

他の人がこれに遭遇した場合の古い質問に対する新しい答え:WickedPDF(PDFkitと同じようにwkhtmltopdfを使用)はこれを簡単にします。

https://github.com/mileszs/wicked_pdf

于 2011-07-09T15:58:01.087 に答える
11

エビはRails3で動作します。私は個人的に問題なく使用しました。最新バージョンのgemを入手する必要がありますレール用のprawntoプラグイン。

PDFkitにはWebkitレンダリングエンジンを使用できるという利点があるため、CSSを使用してレイアウトを定義し、SafariとChromeを使用して一致するWebページを無料で入手できます。エビよりも少し良い学習曲線があります。

于 2010-11-07T23:18:09.033 に答える
7

PDFkitを見たことがありますか?Rails 3で動作すると確信しています。これは、.pdfで終わるルートに一致する任意のHTMLページをPDFに変換できるRackミドルウェアです。

于 2010-11-07T13:25:45.550 に答える
2

エビについては、Rails 3のシームレスな統合がうまく機能しているようです:https ://github.com/Whoops/prawn-rails

于 2013-08-25T10:29:19.750 に答える
1

PDFだけでなくXLSXとCSVも生成するレポートgemを使用できます。

# a fake Manufacturer class - you probably have an ActiveRecord model
Manufacturer = Struct.new(:name, :gsa)

require 'report'
class ManufacturerReport < Report
  table 'Manufacturers' do # you can have multiple tables, which translate into multiple sheets in XLSX
    head do
      row 'Manufacturer report'
    end
    body do
      rows :manufacturers
      column 'Name', :name
      column 'GSA?', :gsa
    end
  end
  # you would want this so that you can pass in an array
  # attr_reader :manufacturers
  # def initialize(manufacturers)
  #   @manufacturers = manufacturers
  # end
  def manufacturers
    [
      Manufacturer.new('Ford', true),
      Manufacturer.new('Fischer', false),
      Manufacturer.new('Tesla', nil),
    ]
  end
end

を呼び出すreport.pdf.pathと、PDFがtmpディレクトリに生成されます。

report = ManufacturerReport.new
puts report.pdf.path #=> /tmp/185051406_Report__Pdf.pdf
puts report.xlsx.path #=> /tmp/185050541_Report__Xlsx.xlsx

次のようにコントローラーで実行できます。

@manufacturers = Manufacturer.all
respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @manufacturers }
  format.pdf do
    report = ManufacturerReport.new(@manufacturers) # using the commented-out code
    send_file report.pdf.path, :type => 'application/pdf', :disposition => 'attachment', :filename => 'ManufacturersReport.pdf'
    # tmp files are periodically cleaned up by the operating system, but if you want to be extra clean you can call
    # report.cleanup
    # but this may remove the tmp files before apache/nginx/etc. finishes delivering the file
  end
end

最終結果:

PDF

PDF

XLSX

xlsx

XLSXには自動フィルターが自動的に追加されていることに注意してください。

于 2013-04-04T17:33:01.850 に答える