Sha256: 93eb9797d6e72764b1b905da1b09527957fd964180a9bf3a8c9548bbf72ec1e7

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 KB

Contents

require 'open3'

module Wisepdf
  class Writer
    def initialize(wkhtmltopdf = nil, options = {})
      self.wkhtmltopdf = wkhtmltopdf unless wkhtmltopdf.nil?
      self.options = options
    end

    def to_pdf(string, options={})
      invoke = self.command(options).join(' ')
      self.log(invoke) if Wisepdf::Configuration.development? || Wisepdf::Configuration.test?

      result, err = Open3.popen3(invoke) do |stdin, stdout, stderr|
        stdin.binmode
        stdin.write(string)
        stdin.close
        [stdout.read, stderr.read]
      end

      raise Wisepdf::WriteError if result.to_s.strip.empty?

      return result
    end

    def wkhtmltopdf
      @wkhtmltopdf || self.wkhtmltopdf = Wisepdf::Configuration.wkhtmltopdf
    end

    def wkhtmltopdf=(value)
      raise Wisepdf::NoExecutableError.new(value) if value.blank? || !File.exists?(value)
      @wkhtmltopdf = value
    end

    def options
      @options ||= Wisepdf::Parser.parse(Wisepdf::Configuration.options.dup)
      @options
    end

    def options=(value)
      self.options.merge!(Wisepdf::Parser.parse(value))
    end

    protected
    def command(options = {})
      options = Wisepdf::Parser.parse(options)

      args = [self.wkhtmltopdf]
      args += self.options.merge(options).to_a.flatten.compact
      args << '--quiet'

      args << '-'
      args << '-'

      args.map {|arg| %Q{"#{arg.gsub('"', '\"')}"}}
    end

    def log(command)
      puts "*"*15
      puts command
      puts "*"*15
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wisepdf-1.2.7 lib/wisepdf/writer.rb