Bonjour à tous,
Je souhaite convertir plusieurs fichiers PDF en txt voici le code que j'utilise :
Le soucis que je rencontre c'est que je suis obligé de le faire un par un et que mon programme doit s'exécuter deux fois avant de me créer le fichier en question de ce fait je met les autres fichiers en commentaire et lorsque je retire les commentaires et que j'exécute deux fois le programme il me crée uniquement le dernier fichier.
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 use strict; use warnings; use CAM::PDF; use CAM::PDF::PageText; use Config::IniFiles; my @repertoire; my @fichier_facture; ## tous les fichiers facture au format PDF ## my @fichier_facture1;## tous les fichiers facture au format TXT ## my @fichier_paie;## tous les fichiers paie au format PDF ## my @fichier_paie1;## tous les fichiers paie au format TXT ## sub convert_pdf_to_text ($$) { my $pdf = CAM::PDF->new(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, '>>', shift; print $fout $text; close $fout; } my $pdf_filename = $fichier_facture[0]; ##'C:\facture\/exemple_facture.pdf'; my $txt_filename = $fichier_facture1[0]; ##'C:\facture\/exemple_facture.txt'; $pdf_filename = $fichier_facture[1]; ##'C:\facture\/exemple_facture1.pdf'; $txt_filename = $fichier_facture1[1]; ##'C:\\facture\/exemple_facture1.txt'; $pdf_filename = $fichier_paie[0]; ##'C:\bulletin_paie\/paie.pdf'; $txt_filename = $fichier_paie1[0]; ## 'C:\bulletin_paie\/paie.txt'; $pdf_filename = $fichier_paie[1]; ##'C:\bulletin_paie\/paie1.pdf'; $txt_filename = $fichier_paie1[1]; ## 'C:\bulletin_paie\/paie1.txt'; $pdf_filename = $fichier_paie[2]; ##'C:\bulletin_paie\/paie2.pdf'; $txt_filename = $fichier_paie1[2]; ## 'C:\bulletin_paie\/paie2.txt'; convert_pdf_to_text($pdf_filename, $txt_filename);
Est-ce possible de réaliser une boucle permettant que tout les fichiers PDF se trouvant dans les répertoires bulletin_paie et facture doivent être convertit au format txt et en exécutant qu'une seule fois le programme ?
Pour vérifier que les fichiers ont bien été crées j'utilise cette fonction :
Je vous remercie d'avance pour votre aide.
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 my $cfg = Config::IniFiles->new( -file => $ARGV[0] ); foreach ('REP_FACTURE','REP_BULLETIN','REP_FACTURE_TXT','REP_BULLETIN_TXT') { push @repertoire, $cfg->val('repertoire', $_) if $cfg->val('repertoire', $_); } foreach ('FIC_1','FIC_2') { push @fichier_facture, $cfg->val('fichier_facture', $_) if $cfg->val('fichier_facture', $_) ; } foreach ('FIC_3','FIC_4') { push @fichier_facture1, $cfg->val('fichier_facture1', $_) if $cfg->val('fichier_facture1', $_) ; } foreach ('FIC_5','FIC_6','FIC_7') { push @fichier_paie, $cfg->val('fichier_paie', $_) if $cfg->val('fichier_paie', $_); } foreach ('FIC_8','FIC_9','FIC_10') { push @fichier_paie1, $cfg->val('fichier_paie1', $_) if $cfg->val('fichier_paie1', $_); } 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[1]); foreach my $File (@Files) { next unless $File =~ /\.pdf$/i; print "$File \n"; } @Files = GetFilesList ($repertoire[2]); foreach my $File (@Files) { next unless $File =~ /\.txt$/i; print "$File \n"; } @Files = GetFilesList ($repertoire[3]); foreach my $File (@Files) { next unless $File =~ /\.txt$/i; print "$File \n"; }
En espérant que vous arrivez à comprendre ce que je vous demande, parce qu'il se pourrait que mes informations ne soient pas tout à fait claire.
Cordialement
Solerian
Partager