1

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

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

我在页面底部还有一个“创建 PDF”按钮。当按下时,create_pdf_invoiceJobsController的被称为:

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的建议。

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

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

红宝石崩溃:

在此处输入图像描述

我用:

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

有任何想法吗 ?

4

2 回答 2

2

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

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

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

保存 PDFKit 中间件显示的 PDF 文件

于 2011-03-03T09:46:12.857 回答
2

首先,您需要告诉应用程序使用 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 版本中一切正常,这与路径有关,所以也许它可以解决您的问题。

于 2011-03-03T07:55:44.260 回答