2012-01-04 10 views
0

私は多くの検索を行い、PDFスタンパを自分のレールアプリケーションで動作させるための解決策を見つけることができません。チュートリアルから、私はモデルにメソッドを書くように見えますか?私はnameLastとnameFirstの2つのフィールドを持つシンプルなアプリを書いた。私がしたいのは、ユーザー情報のフィールドが含まれているPDFにこれらを書き込むことだけです。 2つのフィールドがFirstNameとLastNameになるので、PDFスタンパを正しく使用するのに最適な時間ですか?私は、レールアプリケーションからユーザーデータを取り出し、ボタンを押してPDFを生成できるようにしたいだけです。ここに私のモデルの方法があります。Ruby on Rails PDF Stamper/iText

def savePDF 
    pdf = PDF::Stamper.new("sample.pdf") 
      pdf.text :nameFirst, "Jason" 
       pdf.text :nameLast, "Yates" 
       pdf.save_as "my_output.pdf" 
    end 

これは私が正しく理解してはいけないチュートリアルから明らかです。私は実際にJavaでこの作業をかなり簡単にすることができますが、私はjRubyを使いたくありません。私はうまく動作しているrjbを使用しています。私はちょうど私がこれを稼働させるために何が起こる必要があるかを正しく理解しているとは思わない。どんな助けでも大歓迎です!

私はフィールドのソースデータとしてXFDFを使用して同じことをやっていた次のコードは、私のために働いた、多分それはaswellあなたに参考になる

答えて

0

pdfreader = Rjb::import('com.itextpdf.text.pdf.PdfReader') 
    pdfstamper = Rjb::import('com.itextpdf.text.pdf.PdfStamper') 
    pdffields = Rjb::import('com.itextpdf.text.pdf.AcroFields') 
    xfdfreader = Rjb::import('com.itextpdf.text.pdf.XfdfReader') 


    pdf = pdfreader.new("#{Rails.root}/public/out/temp/form1.pdf", nil) 
    xfdf = xfdfreader.new(f) 

    stamp = pdfstamper.new(pdf, filestream.new("/tmp/text#{i}.pdf")) 
    pdffields = stamp.getAcroFields() 
    pdffields.setFields(xfdf) 
    stamp.close 
+0

スタンプ= pdfstamper.new(pdf、filestream.new( "/ tmp/text.pdf")) – rui

3

私はの作者ですpdf-stamper gem。

save_asメソッドは、作成したPDFをファイルシステムに保存します。 Railsアプリケーションを構築しているなら、それがあなたの望むものだとは思わない。

私はあなたの質問から、あなたは "スタンプされた" PDFをブラウザに送り返したいと思っています。その場合は、作成したPDFにto_sを呼び出し、その出力をRails send_dataメソッドに渡す必要があります。

コントローラ(モデルではない)に、このようなコードを追加したいと思うでしょう。

def send 
    pdf = PDF::Stamper.new("sample.pdf") 
    pdf.text :nameFirst, "Jason" 
    pdf.text :nameLast, "Yates" 
    send_data(pdf.to_s, :filename => "output.pdf", :type => "application/pdf",:disposition => "inline") 
end  

ここでの問題は、実際にはpdf-stamper gemのドキュメントです。あなたが望む機能は、文書化されていないので、あなたの混乱があっただけです。私はそれを修正する必要があります。