【问题标题】:Using Prawn with Sinatra将虾与 Sinatra 一起使用
【发布时间】:2015-04-14 20:59:31
【问题描述】:

如何在 Sinatra 中使用 Prawn 生成表单数据的 PDF?

我的表单位于站点的索引操作中,但 Prawn 无法识别传入的变量。我在 http://prawnpdf.org/docs/0.11.1/Prawn/Document.html 的文档中找到了此代码。

get '/download' do 

  content = "Hello World"

  Prawn::Document.generate "example.pdf" do |pdf|
    pdf.font "Times-Roman"
    pdf.draw_text content, :at => [200,720], :size => 32
  end
end 

现在这很好,但是当我尝试从这样的参数中传递我的变量时:

post '/resume' do 
  @name = params.fetch 'name' 
  ...
end 

然后如果我像这样将它添加到 /download 路由中:

get '/download' do 

  Prawn::Document.generate "example.pdf" do |pdf|
    pdf.font "Times-Roman"
    pdf.draw_text @name, :at => [200,720], :size => 32
  end
end 

它不会画任何东西。此外,奇怪的是,它会生成一个 pdf 文件,但不会重定向到它,我必须手动加载它。

真的坚持这一点 - 建议?

【问题讨论】:

  • 您确定name 不是空白吗?尝试记录并确保。
  • 不,它不是空白的。我什至去掉了 params.fetch 'name' 部分,只是将@name 设置为等于“name”,它仍然不会在 pdf 上打印出来。问题似乎是 Prawn 无法与它所在的路由之外的变量进行交互。我什至尝试将 name 设为全局变量,但它仍然无法访问它们。
  • 很奇怪。尝试做d = Prawn::Document.new do |pdf|.... 然后调用d.render_file('example.pdf')
  • 我试过了,但还是不能。老实说,Prawn 似乎无法处理其路线之外的变量。我认为有很多 Rails 实现。也许我应该在 Rails 中重建应用程序。我尝试了最后的努力,包括一个“before do”块来传递一个变量,但它仍然没有呈现在 pdf 上。不过感谢您的帮助。

标签: html ruby forms web sinatra


【解决方案1】:

Every request creates a new instance of your Sinatra app to serve it。因此,实例变量在 2 个不同的请求中不会相同。您要么需要使用多种方式(cookies、本地存储、数据库、缓存等)中的一种来持久化数据,要么需要将 Prawn 逻辑放在 POST 路由中。

【讨论】:

  • 感谢您的回复 - 这完全有道理。我刚开始使用 Sinatra 和一般的网络开发,有时会卡在一些事情上。我现在正在寻找在应用程序中实现会话。
  • 没问题 - 我们都去过那里! :)
猜你喜欢
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
相关资源
最近更新 更多