#!/usr/bin/ruby # Ruby lpr wrapper om multipaginaprinten makkelijk te maken. # Geschreven door Pieter de Bie, pdebie@ai.rug.nl # Meeste inspiratie gehaald van http://www.cups.org/documentation.php/options.html require 'optparse' require 'ostruct' def parse_options #defaults options = OpenStruct.new options.dubbelzijdig = true opts = OptionParser.new do |opts| opts.banner = "Usage: print OPTIONS FILES" opts.separator "" opts.separator "OPTIONS are:" opts.on("-n", "--aantal=#", Integer, "Hoeveel kopieen") do |n| if n < 1 puts "-n moet groter dan 1 zijn" end options.num = n end opts.on("-p", "--per-pagina=#", Integer, "Aantal pagina's per vel") do |p| # TODO: short-edge als 6 pagina's? if ![1,2,4,6].include? p puts "-p kan alleen 1, 2, 4 of 6 zijn" exit 1 end if p > 1 && options.border == nil options.border = true end if p == 6 options.layout= :btlr end options.num_up = p end opts.on("-d","--[no-]dubbelzijdig", "Print dubbelzijdig (standaard aan)") do |d| options.dubbelzijdig = d end opts.on("-b","--[no-]border", "Print border om pagina's") do |b| options.border=b end opts.separator "" opts.on_tail("-h", "--help", "Geeft dit bericht :)") do puts opts exit end # TODO: -P (page-list) # TODO: -f --force end begin opts.parse!(ARGV) rescue OptionParser::InvalidOption => boom print boom.to_s + "\n" puts opts exit end #FIXME: lelijk! @waa = opts return options end @options = parse_options if ARGV.size == 0 puts "Geen invoerbestanden meegegeven!" puts @waa exit 1 end ARGV.each do |x| if !(x =~ /.*\.(pdf|txt|ps)$/) puts "Invoerbestanden zijn niet correct" exit 1 elsif !(File.exist? x) puts "Bestand #{x} niet gevonden!" exit 1 end end # Create lpr string ops = [] if @options.dubbelzijdig ops << "-o sides=two-sided-long-edge" end if @options.num_up ops << "-o number-up=#{@options.num_up}" end if @options.num ops << "-n #{@options.num}" end if @options.border ops << "-o page-border=single" end if @options.layout ops << "-o number-up-layout=#{@options.layout}" end ops << ARGV puts "Printing..." puts "Running #{ops.join(" ")}" `lp #{ops.join(" ")}`