使用 Rails 3 将嵌入的 ruby 文件转换为 PDF 文件,而不仅仅是 HTML 文件

convert embedded ruby file to PDF file instead of only HTML file using Rails 3

我想在使用 Rails 单击 link 后将我的嵌入式 ruby 文件转换为 PDF 文件 3.I 可以简单地转换 html使用 pdfkit gem 将文件转换为 PDF 文件。我在下面解释我的代码。

users_controller.rb:

class UsersController < ApplicationController
    def index

    end
    def download_pdf
       #html = render_to_string(:action => "/users/download_pdf.html.erb")
       #kit = PDFKit.new('http://google.com')
       #kit = PDFKit.new(html)
       #send_data(kit.to_pdf, :filename => 'report.pdf', :type => 'application/pdf', :disposition => 'inline')
       kit = PDFKit.new("<h1>Hello</h1><p>This is PDF!!!</p>", :page_size => "A4")
       send_data(kit.to_pdf, :filename => 'report.pdf', :type => 'application/pdf', :disposition => 'inline')
      #file = kit.to_file('my_file_name.pdf')
    end
end

在这个控制器页面中,我成功地从 HTML 转换为 PDF。

users/index.html.erb:

<p>
    <%= link_to "Download pdf",download_pdf_path(:format => 'pdf') %>
</p>

当用户单击上面的 "download_pdf" link 时,download.html.erb 将转换为 PDF 文件,它应该在指定的 folder.The [= 中显示和下载23=] 文件如下。

users/download.html.erb:

<h1>Hello Rails</h1>

以上文件应使用适当的 css 转换为 PDF 文件。如果我有 css,如下所示。

application.css:

h1{
width:100px;
height:100px;
background-color:red;
}

如何将此 CSS 包含在该 PDF file.My 其他文件如下。

pdfkit.rb:

PDFKit.configure do |config|
    #config.wkhtmltopdf =Rails.root.join('bin', 'wkhtmltopdf-i386').to_s
    config.wkhtmltopdf='C:/wkhtmltopdf/bin/wkhtmltopdf.exe'
    #config.default_options[:ignore_load_errors] = true
end

请帮我解决这个问题,让这个成功。

通过使用 wicked_pdf gem 我收到以下错误。

error:

用户控制器中的运行时错误#download_pdf

Error: Failed to execute:
["C:/wkhtmltopdf/bin/wkhtmltopdf.exe", "file://C:/DOCUME~1/SUBHRA~1/LOCALS~1/Temp/wicked_pdf20150527-3204-calx6j.html", "C:/DOCUME~1/SUBHRA~1/LOCALS~1/Temp/wicked_pdf_generated_file20150527-3204-59mbli.pdf"]
Error: PDF could not be generated!
 Command Error: Loading pages (1/6)
[>                                                           ] 0%
[======>                                                     ] 10%
Error: Failed loading page file://c/DOCUME~1/SUBHRA~1/LOCALS~1/Temp/wicked_pdf20150527-3204-calx6j.html (sometimes it will work just to ignore this error with --load-error-handling ignore)
Exit with code 1 due to network error: ContentNotFoundError

为此 gem 检查以下代码。

users/users_controller.rb:

class UsersController < ApplicationController
    def index

    end
    def download_pdf
         render pdf: 'test',
           layout: '/layouts/test',
           template: '/users/test',
           handlers: [:erb],
           formats: [:pdf],
           :save_to_file => Rails.root.join('public', "test.pdf")

    end
end

wicked_pdf.rb:

WickedPdf.config = {
  #:wkhtmltopdf => '/usr/local/bin/wkhtmltopdf',
  #:layout => "pdf.html",
  :exe_path => 'C:/wkhtmltopdf/bin/wkhtmltopdf.exe'
}

您可以通过以下方式包含您的样式表:

def download_pdf
  kit = PDFKit.new(File.open(Rails.root.join('app', 'views', 'users', 'download.html.erb')))
  kit.stylesheets << Rails.root.join("app","assets","application.css")
  send_data(kit.to_pdf, :filename => 'report.pdf', :type => 'application/pdf', :disposition => 'inline')
end