ScanSnap
07-11-16
posted by
sakamoto
オフィスには常時稼働しているFreeBSDサーバがあるので、これに着目。
FreeBSDでもsaneでスキャン可能。
ということでScanSnapを監視して、スキャンに成功すれば、まとめて1つのPDFに変換するスクリプトを作りました。
#!/usr/bin/env ruby
require 'fileutils'
tmpdir = "/tmp/ss.#{$$}"
dstdir = "/vol/ScanSnap/"
Dir.mkdir(tmpdir)
Dir.chdir(tmpdir)
system "/usr/X11R6/bin/scanimage --format tiff --mode Color --resolution 150 -b
--source 'ADF Duplex'"
files = Array.new
Dir.foreach('.') do |file|
next unless file =~ /^out\d+.tif$/
pdf = file + ".pdf"
system "/usr/local/bin/tiff2pdf -z -o #{pdf} #{file}"
files.push pdf
end
unless files.empty?
pdfs = files.sort do |a,b|
a =~ /out(\d+).tif/
a = $1.to_i
b =~ /out(\d+).tif/
b = $1.to_i
a <=> b
end
filebase = dstdir + Time.now.strftime("%y%m%d_")
n = 0
t = Dir.glob(filebase + "*").sort.last
if t
t =~ /_(\d+)S*.pdf/
n = $1.to_i + 1
end
cmd = "/usr/local/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="
system cmd + filebase + sprintf("%03d.pdf", n) + " " + pdfs.join(' ')
system cmd + filebase + sprintf("%03dS.pdf", n) + " " + pdfs.delete_if{|a|
a =~ /out(\d+).tif/
a = $1.to_i
(a % 2) == 0
}.join(' ')
end
Dir.chdir("/")
FileUtils.rm_rf tmpdir
(ruby, sane-backends, tiff, ghostscript-gpl などを使用しています。cronで毎分動かしたりすると良いです)
紙を束ねてScanSnapに刺すだけでPDFに書き出されます。超便利です。
とまぁ、動かすのにボタンすら押さない、という、いさぎよい、やりたいことが決まっているので無くしてしまってもいい行程を省いたインターフェースもありなんじゃないでしょうか。
確認なしで実行するのが危険な場合もありますから「適インターフェース適所」ですけども。坂本でした。








>動かすのにボタンすら押さない、という、いさぎよい、やりたいことが決まっているので無くしてしまってもいい行程を省いたインターフェースもありなんじゃないでしょうか。
エレベータの「閉じる」ボタンはない方が良いデザインではないか、という主張を聞いたことがあります。それと似ている気がしました。
19 Nov 2007 | by: 石橋