#! /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';