【问题标题】:Rails 3 + PDFKit: How to convert a view to PDF?Rails 3 + PDFKit:如何将视图转换为 PDF?
【发布时间】:2011-03-03 05:38:31
【问题描述】:

在我的 Rails 3 应用程序中在 Windows 上我有以下页面,其中显示了工作收据并允许用户对其进行编辑:

http://localhost:3001/jobs/45/invoice

我在页面底部还有一个“创建 PDF”按钮。按下时,我的JobsController 中的create_pdf_invoice 被调用:

def create_pdf_invoice
    job = Job.find(params[:id])

    kit = PDFKit.new("<h1>Hello</h1><p>This is PDF!!!</p>", :page_size => "A4")
    file = kit.to_file("my_file_name.pdf")

    redirect_to(:action => 'index')
  end
end

一切正常,即创建 PDF!

我的问题是如何打印发票本身而不是这个静态文本(比如我在http://localhost:3001/jobs/45/invoice 页面上按“打印”)?


更新

我试着放了

require 'pdfkit'

config.middleware.use PDFKit::Middleware

config/application.rb 建议here

服务器正常启动,但是当我去

http://localhost:3001/jobs/45/invoice.pdf

Ruby 崩溃:

我用:

ruby 1.9.2p0 (2010-08-18) [i386-mingw32]
Rails 3.0.1
rake, version 0.8.7
pdfkit (0.5.0)

有什么想法吗?

【问题讨论】:

  • 我不确定我是否理解正确。您想将http://localhost:3001/jobs/45/invoice 的视图转换为 PDF,或者您想使用(例如激光)打印机将当前视图print?或者打印 PDF 而不是 HTML?
  • 我想将http://localhost:3001/jobs/45/invoice 转换为PDF。
  • 在@tommasop 的回答之后,我没有太多要说的:) 但railscasts.com/episodes/220-pdfkit,也可能会有所帮助。

标签: ruby-on-rails ruby-on-rails-3 pdfkit


【解决方案1】:

首先您需要告诉应用程序使用 pdfkit 作为中间件。

所以你需要在初始化器的某个地方放置:

# PDFKit
require 'pdfkit'
middleware.use PDFKit::Middleware

PDFKit.configure do |config|
  config.wkhtmltopdf = 'windows_path_to_wkhtmltopdf'
end

之后如果你打电话

http://localhost:3001/jobs/45/invoice.pdf

应该为您生成一个 pdf。

PDFkit 是一个中间件,可以截取相应呈现页面的 pdf 格式。

如果您愿意,您还可以通过正则表达式或字符串限制配置中的 pdfable 路由。

请注意,如果页面中有图像,则必须使用绝对路径调用它们。

我们还发现 pdfkit 0.5.0 存在一些问题,但在 0.4.6 版本中一切正常,它与路径有关,所以也许它可以解决您的问题。

【讨论】:

  • 我上面提到的代码示例有效,即wkhtmltopdf配置正确,所以这不是这里的问题...
  • 我可以给你两个一般提示:1.你可以试试github.com/nkokkos/PDFKit这个适用于windows xp机器的pdfkit版本2.似乎问题可能是windows中不存在fork()函数ruby-forum.com/topic/214311
  • 您知道如何解决 Windows 中的fork() 问题吗?
【解决方案2】:

在PDFKit中间件的帮助下,您只能在浏览器中查看pdf格式的html页面。 如果要显示下载提示,则必须在操作中设置标题。

headers["Content-Disposition"] = "附件;文件名=export"

此外,如果您想将 pdf 文件保存在服务器中,那么您可以试试这个链接。

Save PDF file shown by PDFKit middleware

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多