class Pdfgen
Public Class Methods
new(html_or_url)
click to toggle source
# File lib/pdfgen.rb, line 15 def initialize(html_or_url) if html_or_url =~ /\Ahttp|\Afile/ @url = html_or_url @html = nil else @url = nil @html = html_or_url end @viewport_options = nil @emulate_media = nil @launch_options = Hash.new @wait_for_timeout = nil @debug_time = nil @url_options = { waitUntil: 'networkidle0' } end
Public Instance Methods
debug_mode(debug_time)
click to toggle source
# File lib/pdfgen.rb, line 52 def debug_mode(debug_time) raise TypeError.new("Timeout must be an integer or respond to #to_i") unless debug_time.kind_of?(Integer) || (debug_time.respond_to?(:to_i) && debug_time.to_i) @debug_time = debug_time self end
emulate_media(media_type)
click to toggle source
# File lib/pdfgen.rb, line 36 def emulate_media(media_type) @emulate_media = media_type self end
launch_options(launch_options)
click to toggle source
# File lib/pdfgen.rb, line 41 def launch_options(launch_options) @launch_options = launch_options self end
set_viewport(viewport_options)
click to toggle source
# File lib/pdfgen.rb, line 31 def set_viewport(viewport_options) @viewport_options = viewport_options self end
to_pdf(opts = {})
click to toggle source
# File lib/pdfgen.rb, line 63 def to_pdf(opts = {}) stdin_options = { pdf_options: opts, current_path: Dir.pwd } stdin_options = stdin_options.merge(viewport_options: @viewport_options) if @viewport_options stdin_options = stdin_options.merge(emulate_media: @emulate_media) if @emulate_media stdin_options = stdin_options.merge(wait_for_timeout: @wait_for_timeout) if @wait_for_timeout if @debug_time stdin_options = stdin_options.merge(wait_for_timeout: @debug_time) stdin_options = stdin_options.merge(launch_options: @launch_options.merge(headless: false)) stdin_options = stdin_options.merge(debug_mode: true) else stdin_options = stdin_options.merge(launch_options: @launch_options) end pdf_output = nil error_output = nil status = nil if @html file = Tempfile.new('input_html') file.write(@html) file.close pdf_output, error_output, status = Open3.capture3(MAKE_PDF_COMMAND, file.path, stdin_data: stdin_options.to_json) file.unlink else stdin_options = stdin_options.merge(url: @url) stdin_options = stdin_options.merge(url_options: @url_options) pdf_output, error_output, status = Open3.capture3(MAKE_PDF_COMMAND, stdin_data: stdin_options.to_json) end unless status.success? raise "This error was encountered running node to create the pdf: #{error_output}" end unless pdf_output raise 'There was an error creating the temporary file used to pass the HTML to node.' end pdf_output end
url_options(url_options)
click to toggle source
# File lib/pdfgen.rb, line 58 def url_options(url_options) @url_options = @url_options.merge(url_options) self end
wait_for_timeout(wait_for_timeout)
click to toggle source
# File lib/pdfgen.rb, line 46 def wait_for_timeout(wait_for_timeout) raise TypeError.new("Timeout must be an integer or respond to #to_i") unless wait_for_timeout.kind_of?(Integer) || (wait_for_timeout.respond_to?(:to_i) && wait_for_timeout.to_i) @wait_for_timeout = wait_for_timeout self end