exe/hamidashi
#!/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