Sha256: 16b8113ec0457b9f2cfd7e48ec02665531914ea02787e3e8d431290ed35dbb27

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

require 'tmpdir'
require 'pdftoimage/version'
require 'pdftoimage/image'

module PDFToImage
  class PDFError < RuntimeError; end
end

module PDFToImage
  # A class variable for storing the location of our temp folder
  @@pdf_temp_dir = File.join(Dir.tmpdir())

  begin
    tmp = `pdftoppm -v 2>&1`
    raise(PDFToImage::PDFError, "poppler_utils not installed") unless tmp.index('Poppler')
  rescue Errno::ENOENT
    raise PDFToImage::PDFError, "poppler_utils not installed"
  end

  begin
    tmp = `identify -version 2>&1`
    raise(PDFToImage::PDFError, "ImageMagick not installed") unless tmp.index('ImageMagick')
  rescue Errno::ENOENT
    raise PDFToImage::PDFError, "ImageMagick not installed"
  end

  class << self

    # Opens a PDF document and prepares it for splitting into images.
    #
    # @param [filename] The filename of the PDF to open
    # @return [Array] An array of images
    def open(filename)
      target_path = random_filename

      if not File.exists?(filename)
        raise PDFError, "File '#{filename}' not found."
      end

      cmd = "pdftoppm -png #{filename} #{target_path}"

      `#{cmd}`
      if $? != 0
        raise PDFError, "Error reading PDF."
      end

      pngs = Dir.glob("#{target_path}*.png")

      images = []

      pngs.each do |png|
        image = Image.new(png)
        images << image
      end

      return images.sort!
    end

    private

    # Generate a random file name in the system's tmp folder
    def random_filename
      File.join(@@pdf_temp_dir, random_name)
    end

    # Generate a random name of {#length} characters.
    def random_name(length = 15)
      @@chars ||= ("a".."z").to_a + ("A".."Z").to_a + ("1".."9").to_a
      return 'pdftoimage-' + Array.new(length, '').collect{@@chars[rand(@@chars.size)]}.join
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pdftoimage-0.1.1 lib/pdftoimage.rb