Sha256: 5e7b2cf39cbaa59c7a1009171bfca5d19c72e62d68e5f9377fca952108e8a262

Contents?: true

Size: 1.43 KB

Versions: 3

Compression:

Stored size: 1.43 KB

Contents

module PdfHelper
  require 'pdfkit'
  
  def self.included(base)
    base.class_eval do
      alias_method_chain :render, :ezprint
    end
  end
  
  def render_with_ezprint(options = nil, *args, &block)
    if options.is_a?(Symbol) or options.nil? or options[:pdf].nil?
      render_without_ezprint(options, *args, &block)
    else
      options[:name] ||= options.delete(:pdf)
      make_and_send_pdf(options.delete(:name), options)
    end
  end  
    
  private
  
  def make_pdf(options = {})
    options[:stylesheets] ||= []
    options[:layout] ||= false
    options[:template] ||= File.join(controller_path,action_name)
    
    # Stop Rails from appending timestamps to assets.
    ENV["RAILS_ASSET_ID"] = ''
    html_string = render_to_string(:template => options[:template], :layout => options[:layout])

    kit = PDFKit.new(process_html_string(html_string))
    kit.stylesheets = options[:stylesheets].collect{ |style| stylesheet_file_path(style) }

    kit.to_pdf
  end

  def make_and_send_pdf(pdf_name, options = {})
    send_data(
      make_pdf(options),
      :filename => pdf_name + ".pdf",
      :type => 'application/pdf'
    ) 
  end
  
  def stylesheet_file_path(stylesheet)
    stylesheet = stylesheet.to_s.gsub(".css","")
    File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR,"#{stylesheet}.css")
  end

  def process_html_string(html)
    html.gsub!("src=\"/","src=\"#{RAILS_ROOT}/public/") # reroute absolute paths
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ezprint-0.1.2 lib/ezprint/pdf_helper.rb
ezprint-0.1.1 lib/ezprint/pdf_helper.rb
ezprint-0.1.0 lib/ezprint/pdf_helper.rb