Paste: script scan

Author: rvdru
Mode: perl
Date: Sat, 22 Jan 2011 19:29:58
Plain Text |
#! /usr/bin/perl
#------------------------------------------------------------------------------
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

Summary:
Author:
Mode:
Body: