Sha256: a7562d4705dd420cd2630437157410bdca9ef1ea28f62e84c406ad7b4fc452f2
Contents?: true
Size: 1.87 KB
Versions: 6
Compression:
Stored size: 1.87 KB
Contents
module Slim2pdf class Writer attr_accessor :template, :data attr_accessor :wkhtmltopdf_path attr_writer :wkhtmltopdf_command attr_accessor :footer_text, :footer_font, :footer_font_size attr_writer :logger def initialize(template = nil, data = {}) @template = template @data = data @wkhtmltopdf_path = nil @wkhtmltopdf_command = nil end def render_to_html Slim::Template.new(template).render(scope) end def save_to_html(path) create_dir(path) File.write(path, render_to_html) logger.info "[Slim2pdf] HTML file saved: #{path}" if logger end def save_to_pdf(path) create_dir(path) html = create_tmp_html full_command = "#{wkhtmltopdf_command} #{html.path} #{path}" logger.debug "[Slim2pdf] Run command: #{full_command}" if logger `#{full_command}` html.unlink logger.info "[Slim2pdf] PDF file saved: #{path}" if logger end # wkhtmltopdf command without html and pdf file params def wkhtmltopdf_command path = @wkhtmltopdf_path || 'wkhtmltopdf' @wkhtmltopdf_command || "#{path} #{footer_params} -q" end def logger @logger ||= defined?(Rails) ? Rails.logger : nil rescue NoMethodError nil end private # Change hash data to scope object def scope OpenStruct.new(data) end # Create dir if not exists def create_dir(path) FileUtils.mkdir_p(Pathname.new(path).dirname) end def create_tmp_html tmp = Tempfile.new ['slim2pdf', '.html'] begin tmp.write render_to_html ensure tmp.close end tmp end def footer_params return unless footer_text "--footer-line --footer-font-name '#{footer_font || 'verdana'}' " + "--footer-font-size '#{footer_font_size || 10}' --footer-left '#{footer_text}'" end end end
Version data entries
6 entries across 6 versions & 1 rubygems