class PdfThumbs

Public Class Methods

configure(**opts) click to toggle source
# File lib/pdf_thumbnailer/pdf_thumbs.rb, line 2
def self.configure **opts
  # [:pdf_dir, :img_dir, :thumb_sizes].each do |required_opt|
  [:img_dir, :thumb_sizes].each do |required_opt|
    raise ArgumentError, "Missing required config option: :#{required_opt}" unless opts[required_opt]
  end
  @@img_dir = File.join(opts[:img_dir], '') # adds trailing '/' if it doesn't already have one
  @@pdf_dir = File.join(opts[:pdf_dir], '') if opts[:pdf_dir]# adds trailing '/' if it doesn't already have one
  @@thumb_sizes = opts[:thumb_sizes].is_a?(Fixnum) ? [opts[:thumb_sizes]] : opts[:thumb_sizes]
end
thumbnail!() { |img_dir| ... } click to toggle source
# File lib/pdf_thumbnailer/pdf_thumbs.rb, line 12
def self.thumbnail!
  Dir.glob(File.join(@@pdf_dir, '**', '*.pdf')) do |pdf|
    img_dir = thumbnail_pdf @@pdf_dir, pdf.gsub(@@pdf_dir, '')
    yield(img_dir) if block_given?
  end
end
thumbnail_single!(pdf_dir, relative_pdf_path) click to toggle source
# File lib/pdf_thumbnailer/pdf_thumbs.rb, line 19
def self.thumbnail_single! pdf_dir, relative_pdf_path
  thumbnail_pdf pdf_dir, relative_pdf_path, true
end

Private Class Methods

clear_img_dir(relative_pdf_path) click to toggle source
# File lib/pdf_thumbnailer/pdf_thumbs.rb, line 25
def self.clear_img_dir relative_pdf_path
  relative_path = File.dirname relative_pdf_path
  relative_img_path = relative_path == '.' ? File.basename(relative_pdf_path) : File.join(relative_path, File.basename(relative_pdf_path))
  img_dir = File.join(@@img_dir, relative_img_path, '')

  FileUtils.rm_rf(img_dir) if File.directory?(img_dir)
  FileUtils.mkdir_p img_dir

  img_dir
end
thumbnail_pdf(pdf_dir, relative_pdf_path, return_num_pages = false) click to toggle source
# File lib/pdf_thumbnailer/pdf_thumbs.rb, line 36
def self.thumbnail_pdf pdf_dir, relative_pdf_path, return_num_pages = false
  img_dir = clear_img_dir relative_pdf_path
  num_pages = 0

  @@thumb_sizes.each_with_index do |thumb_size, idx|
    `pdftoppm -png -scale-to #{thumb_size} "#{File.join(pdf_dir, relative_pdf_path)}" "#{img_dir}"`

    Dir.glob(File.join(img_dir, '-*.png')) do |img_path|
      page_num = File.basename(img_path, '.png').split('-')[-1].to_i
      File.rename(img_path, File.join(img_dir, "#{thumb_size}_#{page_num}.png"))
      num_pages += 1 if return_num_pages && idx == 0
    end
  end

  return_num_pages ? num_pages : img_dir
end