38

Ruby On Rails Wiki には、RailsでのPDF生成を容易にするいくつかのライブラリがリストされています。住所ラベルを印刷する必要があり (レター形式なので、1 ページあたり 12 ~ 15 の住所)、どれを使用するか決められません。推奨事項はありますか?

4

10 に答える 10

9

確かにエビとエビ。DSLは、PDFをrespond_to形式ブロック内の他の形式と同じように扱うことができるという単純さのように、本当の扱いです。

respond_to do |format|
format.pdf { render :layout => false }

ここにエビのチュートリアルビデオがあります:

于 2009-01-11T20:21:45.317 に答える
3

RTeXもあります。最初にLaTeXに変換したい場合は、これでうまくいきます。LaTeX は、マークアップされたドキュメントを保存するための非常に優れた方法です。それは、各ドキュメントがどれほど静的であるかに依存します。ドキュメントの大部分が動的である場合は、Prawn または PDF::Writer を使用したほうがよいかもしれません。そのほとんどが静的で、それぞれにテキスト置換がいくつかある場合は、LaTeX の方が適している可能性があります。

于 2009-01-11T18:20:54.217 に答える
2

PDFKitもあります。それもかなり面白いです。

于 2012-10-02T14:41:00.463 に答える
2

あまり複雑なことをしていない場合は、基本的な HTML を PDF に変換する HTMLDOC を使用することもできます。これにより、(Prawn の場合のように) 独自のレイアウト構文をさらに学習する必要がなくなります。それはあなたの頭痛の種を救うかもしれません:)

HTMLDOC の ruby​​ gem へのリンクは次のとおりです。

また、HTMLDOC を使用して rails でビューを pdf にレンダリングするための優れたガイドは次のとおりです。

于 2010-12-22T23:28:19.713 に答える
2

エビは行く方法です。今では本当に簡単にエビのラベルを付けることができます。

ここでプロジェクトの README を確認してください。

https://github.com/jordanbyron/prawn-labels#readme

これは、Rails コントローラーで使用される非常に単純な例です。gem 'prawn-labels'Gemfileに追加することを忘れないでください。

names = %w{Jordan Kelly Greg Bob}

labels = Prawn::Labels.render(names, :type => "Avery5160") do |pdf, name|
  pdf.text name
end

send_data labels, :filename => "names.pdf", :type => "application/pdf"
于 2009-10-16T14:37:11.157 に答える
0

あなたのユースケースでprawnは、出力をピクセルレベルで制御する必要があるため、正しい選択である他のほとんどの回答に同意します。

組み込みの (独自の) テーブル スタイル、ヘッダーなどを使用して PDF レポートを生成するには、reportgemを使用できます。「 Rails 3 から PDF を生成する - どのツールを選択すればよいですか?」を参照してください。使い方の例。

于 2013-04-09T19:51:27.510 に答える
0

完全に Ruby ではありませんが、OpenOffice .odt を使用して、serenity と docsplit を組み合わせることで PDF を生成できます。

http://github.com/kremso/serenity

http://documentcloud.github.com/docsplit/

または、odt と cups-pdf を使用して PDF を生成する clamsy gem を使用することもできます。

http://github.com/ngty/clamsy

于 2010-04-29T07:27:33.103 に答える
0

HTMLからのPDF生成に空飛ぶ円盤を使用しました。これは Java ライブラリですが、Ruby-Java Bridge gem を使用して Rails アプリでアクセスできます。これは css 2.1 に準拠しており、css3 からの追加がいくつかあり、ページングをさらに制御できます。HTMLに「pdfコード」を配置する必要がないため、お勧めします.pdfを生成するのと同じビューとパーシャルを使用してブラウザに表示できます。

空飛ぶ円盤: https://github.com/flyingsaucerproject/flyingsaucer

Ruby Java ブリッジ: http://rjb.rubyforge.org/

このモジュールコードを使用してpdfを生成します

require 'rubygems'
require 'rjb'

module Html2Pdf

  def self.included(controller)
      controller.send :helper_method, :create_pdf
  end

  def create_pdf(options = {})
      itext = "#{RAILS_ROOT}/lib/html2pdf/jars/iText-2.0.8.jar"
      core_renderer = "#{RAILS_ROOT}/lib/html2pdf/jars/core-renderer.jar"
      xerces = "#{RAILS_ROOT}/lib/html2pdf/jars/xml-apis-xerces-2.9.1.jar" 
      joinchar = (RUBY_PLATFORM.include? 'mswin') ? ';' : ':'
          classpath = [itext, core_renderer, xerces].join(joinchar)
      Rjb::load(classpath, jvmargs=['-Djava.awt.headless=true'])
      if options[:htmlstring].nil?
      options[:layout] ||= false
          options[:template] ||= File.join(controller_path,action_name+".pdf.erb")
          html_string = render_to_string(:template => options[:template], :layout => options[:layout])
    else
          html_string = options[:htmlstring]
    end
    # Make all paths relative, on disk paths...
    html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
    html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"file:///#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
    html_string.gsub!( /url\(["']+([^:]+?)["']/i ) { |m| "url\(\"file:///#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
    # Remove asset ids on images with a regex // tbh i can't remember what this line is for but i'm sure it did something awesome
    html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| 'src="' + $1.split('?').first + '"' } 
    filename = "#{RAILS_ROOT}/public/pdfs/"+options[:filename]+".pdf"
    fileOutputStream = Rjb::import('java.io.FileOutputStream')
      iTextRenderer = Rjb::import('org.xhtmlrenderer.pdf.ITextRenderer')
      renderer = iTextRenderer.new
      renderer.setDocumentFromString(html_string)
      os = fileOutputStream.new(filename)
      renderer.layout()
      renderer.createPDF(os)
      os.close()
  end

end

次のようなコードで呼び出します。

def generate_pdf  
  htmlsrc = render_to_string(:partial => 'invoice', :layout => false)
  rnd = Time.now.to_s(:datentime).gsub!(/[\/ \.:]/,'')
  filename = "docstore/tmp_#{rnd}"
  create_pdf(:htmlstring => htmlsrc, :filename => filename)
  contents = open("#{RAILS_ROOT}/public/pdfs/#{filename}.pdf", "rb") { |io| io.read }
  File.delete("#{RAILS_ROOT}/public/pdfs/#{filename}.pdf")
  respond_to do | wants |
    wants.html { render :text => contents, :content_type => 'application/pdf' }
  end    
end
于 2013-04-10T10:14:06.610 に答える