Paste: script scan
Author: | rvdru |
Mode: | perl |
Date: | Sat, 22 Jan 2011 19:29:58 |
Plain Text |
use warnings;
use 5.010;
use strict;
use Data::Dumper::Simple;
use Carp;
use IO::Prompt;
use Regexp::Common qw(time);
#------------------------------------------------------------------------------
# Détection du programme de scanner
#------------------------------------------------------------------------------
my $programme_scanner = q{/usr/bin/scanimage};
die qq{Programme "$programme_scanner" inconnu.} if ( ! -x $programme_scanner );
#------------------------------------------------------------------------------
# Détection des scanners
#------------------------------------------------------------------------------
my $separation_champs = q{=X=};
my $chaine_formatage = qq{%d$separation_champs%v %m};
my $commande_detection_scanner =
qq{$programme_scanner --formatted-device-list "$chaine_formatage"};
my $regexp_detection_scanner = qq{(.*) $separation_champs (.*)};
my @scanners_detectes = qx{$commande_detection_scanner};
die qq{Aucun scanner détecté.\nProgramme arrêté.} if ( !@scanners_detectes );
my @scanners;
my $scanner_compteur = 0;
for my $scanner_detecte (@scanners_detectes) {
if ( my ($scanner_device, $scanner_nom) =
( $scanner_detecte =~ m/$regexp_detection_scanner/gxms ) ) {
push @scanners, $scanner_device;
$scanner_compteur ++;
say qq{$scanner_compteur. Scanner $scanner_nom détecté.};
}
}
#------------------------------------------------------------------------------
# Sélection du scanner à utiliser
#------------------------------------------------------------------------------
my $scanner_selectionne = 1;
if ( @scanners_detectes > 1 ){
my $reponse_choix_scanner =
prompt qq{Sélectionner un scanner ci-dessus (1-$scanner_compteur) :\n},
-require =>{ q{Tapez le numéro du scanner à utiliser : } =>
qr/[1..$scanner_compteur]/ixms };
$scanner_selectionne = $reponse_choix_scanner;
}
#say $scanners[$scanner_selectionne-1];
say "-"x10;
#------------------------------------------------------------------------------
# Saisie des paramètres
#------------------------------------------------------------------------------
my ( $date, $fournisseur, $no_facture, );
DATE:
while ( $date = prompt( q{Date de la facture (format AAAAMMJJ) : } ) ) {
last DATE if ( $date =~ $RE{time}{y4m2d2} );
say q{Date non valide, merci de réessayer.};
}
FRNS:
while ( $fournisseur = prompt( q{Nom du fournisseur : } ) ) {
$fournisseur =~ tr/a-z/A-Z/;
last FRNS if ($fournisseur =~ m/^\w+$/gxms);
say q{Saisir le nom du fournisseur, merci.};
}
NUMERO:
while ( $no_facture = prompt( q{No de la facture : } ) ) {
$no_facture =~ tr/a-z/A-Z/;
last NUMERO if ($no_facture =~ m/\w+/gxms);
say q{Merci de saisir un No de facture.};
}
# NB_PAGES:
# while( $nb_pages = prompt( q{Nombre de pages : } ) ) {
# last NB_PAGES if ($nb_pages =~ m/\d/gxms);
# say q{Merci d'indiquer le nombre de pages.};
#}
#------------------------------------------------------------------------------
# Vérifications sur le nom du fichier cible
#------------------------------------------------------------------------------
my ($annee) = $date =~ m/ (\d{4}) \d{4} /gxms;
my $repertoire_base = qq{/MonRepertoire/};
die qq{Répertoire $repertoire_base non accessible} if ( ! -d -x $repertoire_base );
my $nom_fichier_cible = qq{$date-facture-$fournisseur-$no_facture.png};
my $fichier_cible = $repertoire_base.$nom_fichier_cible;
die qq{"$nom_fichier_cible" est un répertoire !} if ( -d $nom_fichier_cible );
if ( -e $fichier_cible ) {
my $reponse_ecraser_fichier =
prompt( qq{Le fichier "$fichier_cible" existe déjà.\n}
.q{Voulez-vous l'écraser (O/n) ? : }, -onechar, -d=>'O',
-require => { q{Répondez par O pour oui ou n pour non : }
=> qr/[OonN]/ixms } );
die q{Abandon. Programme terminé.} if ( lc($reponse_ecraser_fichier) ne 'o' );
die qq{Fichier "$fichier_cible" protégé en écriture.} if
( ! -w $fichier_cible );
}
#------------------------------------------------------------------------------
# Numérisation, transformation et effacement du fichier temporaire
#------------------------------------------------------------------------------
my $repertoire_temp = q{/tmp/};
my $options_scanner = q{ -p --resolution 200 --mode Gray -x 210 -y 297 };
my $nom_fichier_temp = qq{$repertoire_temp/$nom_fichier_cible.pnm};
#my $reponse_ecraser_fichier =
prompt( q{Placez le document dans le scanner et appuyez sur [Entrée]} );
qx{$programme_scanner $options_scanner > $nom_fichier_temp};
qx{convert -monochrome +contrast $nom_fichier_temp $fichier_cible};
qx{rm $nom_fichier_temp};
say qq{Fichier "$fichier_cible" enregistré.};
#my $reponse_quitter = prompt qq{Quitter réellement (o/n) ?\n},
# -onechar,
# -require =>{q{Répondez par o pour oui ou n pour non : } => qr/[on]/ixms };
#exit if lc($reponse_quitter) eq 'o';
New Annotation