Sha256: dca938a78ddcf0713b42c098072d50fc2fd546e7d3478f026bf2ce5d28cfd7c0

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

module Dhalang
  # Allows consumers of this library to create PDFs with Puppeteer. 
  class PDF
    PUPPETEER_SCRIPT_PATH = File.expand_path('../js/pdf-generator.js', __FILE__).freeze
    private_constant :PUPPETEER_SCRIPT_PATH
    
    # Captures the full webpage under the given url as PDF.
    #
    # @param  [String] url    The url to get as PDF.
    #
    # @return [String] The PDF that was created as binary.
    def self.get_from_url(url)
      UrlUtils.validate(url)
      get(url)
    end

    # Captures the full HTML as PDF.
    # Useful when creating dynamic content, for example invoices.
    #
    # @param  [String] html   The html to get as PDF.
    #
    # @return [String] The PDF that was created as binary.
    def self.get_from_html(html)
      html_file = FileUtils.create_temp_file("html", html)
      url = "file://" + html_file.path
      begin
          binary_pdf_content = get(url)
      ensure
        FileUtils.delete(html_file)
      end
      return binary_pdf_content
    end

    
    # Groups and executes the logic for creating a PDF of a webpage.
    #
    # @param  [String] url    The url to create a PDF for.
    #
    # @return [String] The PDF that was created as binary.
    private_class_method def self.get(url)
      temp_file = FileUtils.create_temp_file("pdf")
      begin
        Puppeteer.visit(url, PUPPETEER_SCRIPT_PATH, temp_file.path, "pdf")
        binary_pdf_content = FileUtils.read_binary(temp_file.path)
      ensure
        FileUtils.delete(temp_file)
      end
      return binary_pdf_content
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
Dhalang-0.3.1 lib/PDF.rb
Dhalang-0.3.0 lib/PDF.rb