Sha256: 1729f066f2a0f770b4570707aefe6900d97470f73fa1fa4dbdc0115cbd256ead

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

module Slim2pdf
  class Writer
    attr_accessor :template, :data
    attr_accessor :wkhtmltopdf_command
    attr_accessor :footer_text, :footer_font, :footer_font_size
    attr_accessor :logger

    def initialize(template=nil, data={})
      @template = template
      @data = data
    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
      @wkhtmltopdf_command || "wkhtmltopdf #{footer_params} -q"
    end

    def logger
      @logger ||= defined?(Rails) ? Rails.logger : 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

1 entries across 1 versions & 1 rubygems

Version Path
slim2pdf-0.0.2 lib/slim2pdf/writer.rb