【发布时间】:2019-03-06 20:38:52
【问题描述】:
我一直在将 Ruby on Rails(版本 5.2.1)与 RubyMine IDE 一起用于一个项目,并且正处于开发阶段,我想创建一些基于 PDF 的报告。为此,我选择了 Prawn (2.2.2 版) gem。我设置了一个按钮,可以从页面下载 PDF:
<%= button_to "Download", action: :download_report %>
它被路由到适当的控制器:
get 'pages#download_report' => 'pages#report_page'
post 'pages#download_report', action: :download_report, controller: 'pages'
而在Pages控制器中,download_report方法是:
def download_report
Prawn::Document.generate("hello.pdf") do
text "Hello World!"
end
send_data("hello.pdf", filename: "hello.pdf", type: 'application/pdf')
end
服务器在开发中运行良好,使用按钮没有错误。 PDF 已发送,我可以“打开”它,但 PDF 无法加载,并且无法在我尝试过的任何 PDF 阅读器中打开,包括 Microsoft Edge 和 Adobe Acrobat Reader。我对为什么会发生这个错误感到困惑,因为这个基本测试似乎应该起作用。我对 Ruby on Rails 还比较陌生,所以如果这是一个基本错误,我不会感到惊讶,但我并不容易看到它。感谢您提供任何帮助或建议。
感谢任何提前回复的人!如果您希望我提供更多信息来帮助诊断问题,请告诉我。
【问题讨论】:
-
你检查下载文件的文件大小了吗?它可能是空的吗?
-
@AxelTetzlaff:文件大小只有九个字节左右;传输数据的方式(使用 send_data)可能没有正确返回 PDF,并且可能在途中丢失了一些数据。但是,下面使用 send_file 的答案似乎解决了我的问题。谢谢!
-
我猜文件的内容是“hello.pdf”????
标签: ruby-on-rails ruby pdf pdf-generation prawn