Sha256: d141e2c6ca8bfd8fd72b2bbc70ebff35720a6892058a47b220d5e92efdd6740d

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

module Ezprint
  module Processors
    class Prince < Base
      def self.process(html_string, options = {})
        pdf = IO.popen(self.cmd(options), "w+")
        pdf.puts(self.process_html(html_string))
        pdf.close_write
        result = pdf.gets(nil)
        pdf.close_read
        result
      end

      def self.cmd(options)
        stylesheets           = options.delete(:stylesheets)
        prince_cmd            = `which prince`.chomp

        if prince_cmd.length == 0
          raise RuntimeError.new "Cannot locate prince binary. Please check your path"
        end

        prince_cmd << " --input=html --server "
        stylesheets.each { |s| prince_cmd << " -s #{s} " }
        prince_cmd << " --silent - -o -"
      end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ezprint-0.3.1 lib/ezprint/processors/prince.rb