IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Convertir fichier PDF en fichier txt


Sujet :

Langage Perl

  1. #21
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    J'ai modifié le code avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    open my $fout, '>', $fic_txt_out or die "Ouverture impossible de $fic_txt_out $!";
       print $fout $text;
       close $fout;
    Et ça fonctionne pour tout le répertoire facture.

    Maintenant il faut que je fasse la même chose avec le répertoire paie.
    Lorsque je modifie le nom des variables il ne se passe rien et lorsque je conserve le même nom de variable il ne se passe rien non plus.
    Voici le code complet que j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    use strict;
    use warnings;
    use CAM::PDF;
    use CAM::PDF::PageText;
    use Config::IniFiles;
    
    my @repertoire;
    my @filelist;
    
    my $cfg = Config::IniFiles->new( -file => $ARGV[0] );
    foreach ('REP_FACTURE','REP_BULLETIN') {
    	  push @repertoire, $cfg->val('repertoire', $_) if $cfg->val('repertoire', $_);
    	  }
    
    
    sub GetFilesList 
    {
            my $Path = $_[0];
            my $FileFound;
            my @FilesList=();
    	
            ## Lecture de la liste des fichiers
            opendir (my $FhRep, $Path)
                    or die "Impossible d'ouvrir le repertoire $Path\n";
            my @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);
            closedir ($FhRep);
    
            foreach my $FileFound (@Contenu) {
                    ## Traitement des fichiers
                    if (-f "$Path/$FileFound") {
                            push (@FilesList, "$Path/$FileFound" );
                    }
                    ## Traitement des repertoires
                    elsif ( -d "$Path/$FileFound") {
                            ## Boucle pour lancer la recherche en mode recursif
                            push (@FilesList, GetFilesList("$Path/$FileFound") );
                    }
            }
            return @FilesList;
    }
    my @Files = GetFilesList ($repertoire[0]);
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.pdf$/i;
    	print "$File \n";
    }
    @Files = GetFilesList  ($repertoire[0]);
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.txt$/i;
    	print "$File \n";
    }
     
    @Files = GetFilesList  ($repertoire[1]);
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.pdf$/i;
    	print "$File \n";
    } 
    
    @Files = GetFilesList  ($repertoire[1]);
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.txt$/i;
    	print "$File \n";
    } 
    
    sub convert_pdf_to_text  {
       my $pdf  = CAM::PDF->new(shift);
       my $fic_txt_out = shift;
       my $tmp = $pdf->getPageContentTree(1);
       my $text = CAM::PDF::PageText->render($tmp);
       # ajustements à effectuer par rapport à la sortie,
       # sur un exemple simple, il me fallait ceci:
       $text =~ s/\n{5}/\n/g;
       $text =~ s/\n{4}/ /g;
       
       open my $fout, '>', $fic_txt_out or die "Ouverture impossible de $fic_txt_out $!";
       print $fout $text;
       close $fout;
    }
    
    my @pdf_files = glob ("$repertoire[0]/*.pdf"); # répertoire facture
      for my $in_file (@Files) {
    	my $out_file = $in_file;
    	$out_file =~ s/\.pdf/.txt/;   # construit le nom de fichier en sortie à partir du nom en entrée
    	
       convert_pdf_to_text($in_file, $out_file);
       }
    
    @pdf_files = glob ("$repertoire[1]/*.pdf"); # répertoire bulletin paie
      for my $in_file (@Files) {
    	my $out_file = $in_file;
    	$out_file =~ s/\.pdf/.txt/;   # construit le nom de fichier en sortie à partir du nom en entrée
    	
       convert_pdf_to_text($in_file, $out_file);
       }
    Ce qui est en rouge c'est ce que j'ai modifié dans mon code

  2. #22
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    faut-il que je réinitialise les variables ?

  3. #23
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    DSL, je peux t'aider sur des questions d'algorithmique ou de syntaxe Perl; mais sur tes problèmes d'environnements de développement et de test, je ne peux pas t'aider, n'ayant pas accès à ta machine. A toi d'imprimer à l'écran le contenu des variables pour déterminer ce que fait ton programme, de vérifier que tu lances le bon programme sur les bonnes données, etc., je ne peux le faire à ta place. Ou utilise le debugger: http://perl.developpez.com/faq/perl/...gage-sous-Perl.

  4. #24
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    lorsque j'exécute ce programme j'ai ce message d'erreur :
    Can't call method "getPageContentTree" on an undefined value at c:\convertir_pdf_txt.pl line 67

  5. #25
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Exactement ce que je disais dans mon précédent message: je ne peux pas déboguer à ta place. Il faut que tu apprennes à le faire par toi même.

    Suggestion de méthode de débogage:

    Tu as le message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Can't call method "getPageContentTree" on an undefined value at c:\convertir_pdf_txt.pl line 67
    Donc, la variable $pdf n'est apparemment pas définie quand tu arrives à la ligne 67.

    Donc, la ligne 65 n'a sans doute pas créé d'objet PDF.

    Donc, la fonction convert_pdf_to_text n'a sans doute par reçu de paramètre. Pour le vérifier, modifie le début de cette fonction comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub convert_pdf_to_text  {
        my( $file_in, $fic_txt_out) = @_;
        print "Fichier en entrée: $file_in, fichier en sortie = $fic_txt_out \n");
       my $pdf  = CAM::PDF->new(shift);
    #   my $fic_txt_out = shift;
       my $tmp = $pdf->getPageContentTree(1);
    Ce qui te permet de vérifier avec quels arguments la fonction a été appelée.

    Si, comme c'est probable, elle ne reçoit aucun argument, alors il faut remonter à l'appel de cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @pdf_files = glob ("$repertoire[1]/*.pdf"); # répertoire bulletin paie
      for my $in_file (@Files) {
    	my $out_file = $in_file;
    	$out_file =~ s/\.pdf/.txt/;   # construit le nom de fichier en sortie à partir du nom en entrée
     
       convert_pdf_to_text($in_file, $out_file);
       }
    Avant d'entrée dans la boucle for, vérifie le contenu du tableau @Files:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @pdf_files = glob ("$repertoire[1]/*.pdf"); # répertoire bulletin paie
      print "Fichiers en entrée: @Files\n";
      for my $in_file (@Files) {
    	my $out_file = $in_file;
    	$out_file =~ s/\.pdf/.txt/;   # construit le nom de fichier en sortie à partir du nom en entrée
    	
       convert_pdf_to_text($in_file, $out_file);
       }
    Et ainsi de suite. Tu découvriras sans doute que tu ne cherches pas dans le bon répertoire, que le répertoire est vide, ou qu'il ne contient pas ce que tu crois, ou que sais-je encore.

    C'est un travail méticuleux de détective que tu dois faire. Toi seul peux le faire et il est essentiel d'apprendre ces techniques. On passe généralement plus de temps à déboguer qu'à écrire du code. Apprends donc à le faire, ça peut paraître frustrant au début, mais l'intense satisfaction de trouver l'origine du problème se mérite. Et prends vraiment le temps de lire très attentivement le lien que je t'ai envoyé sur le débogage sous Perl: http://perl.developpez.com/faq/perl/...gage-sous-Perl et de mettre en pratique les techniques qui y sont proposées, surtout celles des six ou sept premières questions/réponses dans un premier temps.

Discussions similaires

  1. convertir un fichier Pdf en fichier txt
    Par aviateur22 dans le forum C#
    Réponses: 4
    Dernier message: 23/03/2016, 15h42
  2. Convertir fichier PDF en fichier txt
    Par solerian dans le forum Langage
    Réponses: 7
    Dernier message: 15/03/2016, 11h53
  3. Convertir un fichier HTML en fichier PDF en ligne de commande
    Par koKoTis dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 15/06/2009, 23h06
  4. [PDF] comment convertir un PDF en fichier images
    Par magnus2005 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 23/05/2006, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo