yasslab/hamidashi

View on GitHub
exe/hamidashi

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby
require 'docopt'
require 'fileutils'
require 'hamidashi'
require 'tmpdir'

doc = <<DOCOPT
Hamidashi
=========
Detect PDF text overflow.

Usage:
  #{__FILE__} <name> [--margin=<margin>]
  #{__FILE__} preview <name> [--margin=<margin>] [--page=<page>]
  #{__FILE__} -h | --help
  #{__FILE__} --version

Options:
  -h --help          Show this screen.
  --version          Show version.
  --page=<page>      Show specified page [default: 10].
  --margin=<margin>  Right margin [default: 4.375%].
DOCOPT

begin
  opt = Docopt::docopt(doc)
rescue Docopt::Exit => e
  puts e.message
  if Docopt::Exit.usage.empty?
    exit
  else
    exit 1
  end
end

if opt['--version']
  puts "hamidashi version #{Hamidashi::VERSION}"
  exit
end

pdf_path  = File.expand_path(opt['<name>'])

unless /\A[\d.]+(%|px|)\z/ =~ opt['--margin']
  puts "margin #{opt['--margin']} is invalid."
  puts 'example: 42% or 42px or 42'
  exit 1
end

hamidashi = Hamidashi.new(opt['--margin'], pdf_path)

if opt['preview']
  preview_path = File.expand_path("hamidashi-preview-#{Time.now.strftime("%Y%m%d%H%M%S")}-" + File.basename(pdf_path, '.pdf') + "-#{opt['--page']}.png")
  hamidashi.save_preview_page(Integer(opt['--page']), preview_path)
  exit
end

output_dir = File.expand_path("hamidashi-#{Time.now.strftime("%Y%m%d%H%M%S")}")

Dir.mktmpdir('hamidashi') do |temp_dir|
  (0...hamidashi.pdf_page_count).each do |page|
    if hamidashi.overflow?(page)
      puts page
      hamidashi.save_page(page, "#{temp_dir}/#{page}.png")
    end
  end

  unless Dir.glob(File.join(temp_dir, '*.png')).empty?
    FileUtils.cp_r(temp_dir, output_dir)
    exit 1
  end
end