Sha256: 395fa697d2f9cb3228e8a23909b04b9277f25e0c23f0d4743c3e8527ad22751e

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

require 'postdoc/postdoc_view_helper'
require 'chrome_remote'

module Postdoc

  class PostdocRailtie < Rails::Railtie
    initializer 'postdoc.register' do |_app|
      ActionView::Base.send :include, PostdocViewHelper
    end
  end

  ActionController::Renderers.add :pdf do |filename, options|
    htmlfile = Tempfile.new ['input', '.html']

    htmlfile.write render_to_string(options)
    htmlfile.flush

    # random port at 1025 or higher
    random_port = 1024 + Random.rand(65535 - 1024)

    pid = Process.spawn "chrome --remote-debugging-port=#{random_port} --headless"

    # FIXME
    sleep 1

    begin
      chrome = ChromeRemote.client port: random_port
      chrome.send_cmd 'Page.enable'

      chrome.send_cmd 'Page.navigate', url: "file://#{htmlfile.path}"
      chrome.wait_for 'Page.loadEventFired'

      response = chrome.send_cmd 'Page.printToPDF', {
        landscape: options[:landscape] || false,
        printBackground: true,
        headerTemplate: options[:header_template] || '',
        footerTemplate: options[:footer_template] || '',
      }
      result = Base64.decode64 response['data']
    ensure
      Process.kill 'KILL', pid
      Process.wait pid

      htmlfile.close
      htmlfile.unlink
    end

    result
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
postdoc-0.2.0 lib/postdoc.rb