Ruby on Rails PDF Stamper / iText

时间:2012-01-04 21:59:27

标签: ruby-on-rails ruby pdf itext rjb

我做了很多搜索,找不到让我的rails应用程序中的PDF压模工作的解决方案。从教程中可以看出我在模型中编写了一个方法?我写了一个简单的应用程序,有两个字段:nameLast和nameFirst。我想要做的就是将这些写入包含用户信息字段的PDF。两个字段碰巧是FirstName和LastName所以完美的时间使用PDF压模吧?我只想从rails应用程序中获取用户数据,然后能够按下按钮并生成PDF。这是我模型中的方法。

  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。我只是觉得我没有正确理解需要做些什么来实现这个目标。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

我是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的文档。你想要的功能只是没有记录,因此你的困惑。我必须解决这个问题。

答案 1 :(得分:0)

我使用xfdf作为字段的源数据也是如此,以下代码对我有用,也许它对你有帮助:

  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