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. #1
    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 Convertir fichier PDF en fichier txt
    Bonjours à tous,

    Je souhaite convertir certains fichiers PDf au format txt.
    Je pense à utiliser le module PDF::API2
    mais je ne vois pas comment rédiger mon programme
    je possède une boucle GetFilesList pour me lister tous les PDF et je vais en faire une seconde pour lister tout les fichiers txt.
    Je pense m'appuyer sur un fichier d'initialisation qui contiendra les arborescences des différents fichiers PDF étant donné que je ne souhaite pas que l'on voit l'arborescence dans le programme.

    Le contenu du fichier d'initialisation sera de la forme :
    [fichier_pdf]
    FACTURE_PDF=C:\facture_pdf\
    BULLETIN_PAIE_PDF=C:\bulletin_paie_pdf\
    ORDONANCE_PDF=C:\ordonance_pdf\

    Dans le répertoire facture_pdf il y aura :
    facture.pdf
    facture1.pdf
    facture2.pdf
    etc...

    Dans le répertoire bulletin_paie_pdf il y aura :
    paie.pdf
    paie1.pdf
    paie2.pdf
    etc ...

    Dans le répertoire ordonance_pdf il y aura :
    ordonance.pdf
    ordonance1.pdf
    ordonance2.pdf
    etc ...

    Le résultat que je souhaite obtenir est le suivant :
    Dans le répertoire facture_pdf il y aura :
    facture.pdf
    facture1.pdf
    facture2.pdf
    et
    facture.txt
    facture1.txt
    facture2.txt

    Dans le répertoire bulletin_paie_pdf il y aura :
    paie.pdf
    paie1.pdf
    paie2.pdf
    et
    paie.txt
    paie1.txt
    paie2.txt

    Dans le répertoire ordonance_pdf il y aura :
    ordonance.pdf
    ordonance1.pdf
    ordonance2.pdf
    et
    ordonance.txt
    ordonance1.txt
    ordonance2.txt

    Est-ce compréhensible ?

    Je vous remercie d'avance pour votre aide.

    Cordialement

  2. #2
    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,

    une idée de squelette possible pour ton programme:

    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
     
    my %dirs = ( facture_pdf => "facture", bulletin_paie => "paie", ordonnance => "ordonnance" ); # à remplacer éventuellement pas fichier de config
     
    for my $dir (keys %dirs) {
        my $file_names = "$dirs{$dir}*.pdf";
        my @files = glob ("$dir/$file_names");
        for my $file (@files) {
            convert ($dir, $file);
        }
    }
     
    sub convert {
        my ($dir, $file_in) = @_;
        my $file_out = $file_in;
        $file_out =~ s/pdf$/txt/;
        # appel du module avec les noms de fichiers, répertoire, etc. pour faire la conversion
    }

  3. #3
    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
    Bonjour,

    Tu fais référence à quel module dans le programme parce que moi j'utilise PDF::API2, est-ce celui là?
    Je ne comprend pas cette partie de code pourrais tu m'éclairer si ça ne te dérange pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for my $dir (keys %dirs) {
        my $file_names = "$dirs{$dir}*.pdf";
        my @files = glob ("$dir/$file_names");
        for my $file (@files) {
            convert ($dir, $file);
        }
    Merci d'avance pour ton aide

    Cordialement

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Lolo t'a proposé un "squelette" de programme. Tu dois remplacer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # appel du module avec les noms de fichiers, répertoire, etc. pour faire la conversion
    par l'instruction de conversion appropriée, selon ce que tu souhaites utiliser comme module.

    Si tu utilises un module pour effectuer la conversion (comme PDF::API2), il te faudra ajouter en début de programme, une ligne du style:
    (en remplaçant module par le nom du module que tu utiliseras.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    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 continué sur l'idée d'utiliser une nouvelle fois un fichier d'initialisation dont voici le contenu :
    [repertoire]
    REP_FACTURE=C:\Users\baranowp\Documents\2016_01_07_08\facture\
    REP_BULLETIN=C:\Users\baranowp\Documents\2016_02_04_05\bulletin_paie\

    [fichier_facture]
    FIC_1=C:\Users\baranowp\Documents\2016_01_07_08\facture\facture1.pdf
    FIC_2=C:\Users\baranowp\Documents\2016_01_07_08\facture\facture2.pdf
    FIC_3=C:\Users\baranowp\Documents\2016_01_07_08\facture\facture3.pdf

    [fichier_paie]
    FIC_4=C:\Users\baranowp\Documents\2016_02_04_05\bulletin_paie\paie1.pdf
    FIC_5=C:\Users\baranowp\Documents\2016_02_04_05\bulletin_paie\paie2.pdf

    Voici le code que j'ai utilisé en m'appuyant sur la base de squelette de Lolo :

    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
    use strict;
    use warnings;
    use PDF::API2;
    use Config::IniFiles;
     
    my $pdf = PDF::API2->new();
    my @repertoire;
    my @fichier_facture;
    my @fichier_paie;
     
    my $cfg = Config::IniFiles->new( -file => $ARGV[0] );
    foreach ('REP_PROD') {
    	  push @repertoire, $cfg->val('repertoire', $_);
      }
    foreach ('FIC_1','FIC_2') {
    	   push @fichier_facture, $cfg->val('fichier_facture', $_) if $cfg->val('fichier_facture', $_);
      }
    foreach ('FIC_4','FIC_5') {
    	   push @fichier_paie, $cfg->val('fichier_paie', $_) if $cfg->val('fichier_paie', $_);
      } 
    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 =~ /\.lst$/i;
    	print "$File \n";
    }
     
    my %dirs = ( facture_pdf => "facture", bulletin_paie => "paie", ordonnance => "ordonnance" ); # à remplacer éventuellement pas fichier de config
     
    for my $dir (keys %dirs) {
        my $file_names = "$dirs{$dir}*.pdf";
        my @files = glob ("$dir/$file_names");
        for my $file (@files) {
            convert ($dir, $file);
        }
    }
     
    sub convert {
        my ($dir, $file_in) = @_;
        my $file_out = $file_in;
        $file_out =~ s/pdf$/txt/;
     
    }
    Lorsque j'exécute mon programme depuis l'interpréteur pour faire appel à mon fichier d'initialisation il me renvoie ce message d'erreur :
    Use of uninitialized value $Path in opendir at C:\users\baranowp\Documents\2016_03_14_18\convertir_pdf_en_txt.pl line 28
    Use of uninitialized value $Path in concatenation (.) or string at C:\users\baranowp\Documents\2016_03_14_18\convertir_pdf_en_txt.pl line 28
    Impossible d'ouvrir le repertoire

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Points : 197
    Points
    197
    Par défaut
    La variable $Path est vide ou non valide.

    Je pense que les back slash des chemins doivent être doublé :
    REP_FACTURE=C:\Users\baranowp\Documents\2016_01_07_08\facture\
    deviendrait
    REP_FACTURE=C:\\Users\\baranowp\\Documents\\2016_01_07_08\\facture\\

    à tester

  7. #7
    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 déjà réalisé un programme qui se base sur un fichier d'initialisation avec la même fonction GetFilesList et il ne m'affichait pas ce message d'erreur, je ne pense pas que ce soit dû à un problème back slash

    Cordialement

  8. #8
    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
    je n'ai plus de message d'erreur. lorsque j'exécute le programme il me renvoi tous les fichiers pdf se trouvant dans les repertoires factures et bulletin de paie maintenant il ne me plus qu'à comprendre comment fonctionne la fonction que Lolo m'a confié.
    pour avoir mes fichiers PDF au format txt

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Java] Convertir un fichier PDF en fichier texte
    Par Djinner² dans le forum EDI et Outils pour Java
    Réponses: 5
    Dernier message: 14/02/2017, 10h07
  2. 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
  3. Fichier pdf (unix) --> fichier .txt
    Par narmika dans le forum Langage
    Réponses: 1
    Dernier message: 21/09/2007, 07h39
  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