convertir des fichiers lst en pdf

convertir des fichiers lst en pdf - Perl - Programmation

Marsh Posté le 09-03-2016 à 11:50:46    

Bonjour à tous,
 
Je souhaite convertir plusieurs fichiers de type lst en PDF sans passer par PDF Creator parce que cette méthode est beaucoup trop longue.
 
Est-ce possible de convertir des fichiers lst en PDF avec perl ?
 
Est-ce que la fonction sprintf permettrait de convertir des formats lst en PDF?
 
Dans un premier temps je pensais utiliser la fonction GetFilesList afin de lister le contenu du répertoire C:\2016_03_07_11\prod et ensuite d'afficher tout les fichiers se trouvant dans prod et ayant pour extension .lst.
Voici le contenu du répertoire prod (pas en intégralité juste 2 3 pur l'exemple):
test.lst
test1.lst
test2.lst
etc ...
 
J'espère que mes informations sont claires et compréhensible.
 
Cordialement

Reply

Marsh Posté le 09-03-2016 à 11:50:46   

Reply

Marsh Posté le 09-03-2016 à 14:40:50    

C'est quoi le format d'un fichier lst? Juste du texte que tu veux convertir 1:1 en pdf? Un pdf par fichier ou tout les fichiers dans un seul pdf?

 

edit: En supposant que c'est du texte, une recherche rapide me retourne des programmes qu'on pourrait appeller depuis Perl.
http://www.gnu.org/software/enscript/enscript.html (à voir si il existe une version Windows (tu es bien sous Windows?))
http://www.eprg.org/pdfcorner/text2pdf/


Message édité par rat de combat le 09-03-2016 à 14:46:34
Reply

Marsh Posté le 09-03-2016 à 14:46:27    

C'est du texte que hje veux convertir au format PDF.
Je voudrais un PDF par fichier si j'ai 100 fichiers lst je veux 100 PDF
 
Cordialement  

Reply

Marsh Posté le 09-03-2016 à 15:25:52    

Regardes si le script perl a2pdf ne convient pas à tes besoins.
http://search.cpan.org/~jonallen/a [...] t/a2pdf.pm
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-03-2016 à 15:44:58    

lorsque je fais un system (a2pdf "C:/2016_03_07_11/prod/test.lst" );  
j'obtiens ce message d'erreur :Name "main::a2pdf" used only once: possible typo at convertir_txt_pdf.pl line 46.
 
Est-ce que cela signifie que je ne peux l'utiliser si et seulement si c'est un fichier txt et non un fichier lst ?

Reply

Marsh Posté le 09-03-2016 à 16:22:31    

J'ai essayé ces deux méthodes :
 
system (a2pdf "C:\2016_03_07_11\prod\test1.lst" );
message d'erreur :  
Can't spawn "cmd.exe": No such file or directory at C:\2016_03_07_11\prod\convertir_txt_pdf.pl
line 46.
 
system (test2pdf "C:\2016_03_07_11\prod\test1.lst" );
message d'erreur :  
Can't spawn "cmd.exe": No such file or directory at C:\2016_03_07_11\prod\convertir_txt_pdf.pl
line 47.
 

Reply

Marsh Posté le 09-03-2016 à 18:29:19    

Si tu fais un system("echo 1" ); p.ex. ça donne quoi? Si il ne trouve pas cmd.exe il faut vérifier la variable PATH (mais prudence, pas faire de bêtises).
 
Après avoir installé le truc chez moi je peux faire genre

Code :
  1. use strict;
  2. use warnings;
  3. my $file="c:\\test.lst";
  4. (my $file_out=$file)=~s/\.lst$/.pdf/;
  5. system("C:\\Programme\\Strawberry\\perl\\site\\bin\\a2pdf $file>$file_out" );


mais je ne trouve pas ça très élégant de passer par system() pour un truc qui est écrit en Perl...
 
edit: Voici un example qui me convient mieux, en partie copié de C:\Programme\Strawberry\perl\site\bin\a2pdf
 

Code :
  1. use strict;
  2. use warnings;
  3. use App::a2pdf;
  4. use autodie;
  5.  
  6. my $file="c:\\test.lst";
  7. (my $file_out=$file)=~s/\.lst$/.pdf/;
  8.  
  9. my %options = (
  10.  header        => 1,          # Include header on all pages
  11.  footer        => 1,          # Include footer on all pages
  12.  line_numbers  => 1,          # Print line numbers
  13.  page_width    => 595,        # A4
  14.  page_height   => 842,        # A4
  15.  left_margin   => 48,         # 0.75"
  16.  right_margin  => 48,         # 0.75"
  17.  top_margin    => 60,         #
  18.  bottom_margin => 60,         #
  19.  font_face     => 'Courier',  # Monospaged text
  20.  font_size     => 9,          # Text size = 9 points
  21.  perl_syntax   => 1,          # Perform Perl syntax highlighting
  22.  icon_scale    => 0.5,        # Icon scaling (%age)
  23.  );
  24.  
  25. $options{title}=$file;
  26.  
  27. my $pdf=App::a2pdf->new(%options);
  28.  
  29. open(IN, '<', $file);
  30. foreach my $line (<IN> )
  31. {
  32.     $pdf->print($line);
  33. }
  34. close(IN);
  35.  
  36. open(OUT, '>', $file_out);
  37. binmode OUT;
  38. print OUT $pdf->{pdf}->stringify;
  39. close(OUT);


Suffit de rajouter un readdir ou semblable et une boucle et c'est gagné.

Message cité 1 fois
Message édité par gilou le 10-03-2016 à 00:01:57
Reply

Marsh Posté le 09-03-2016 à 23:05:17    

solerian a écrit :

lorsque je fais un system (a2pdf "C:/2016_03_07_11/prod/test.lst" );  
j'obtiens ce message d'erreur :Name "main::a2pdf" used only once: possible typo at convertir_txt_pdf.pl line 46.
 
Est-ce que cela signifie que je ne peux l'utiliser si et seulement si c'est un fichier txt et non un fichier lst ?


En faisant:
{
    local @ARGV = ('-o', 'test.pdf', 'C:/2016_03_07_11/prod/test.lst');
    do 'a2pdf';
}
ça devrait marcher, et envoyer la sortie sur test.pdf, mais j'ai pas testé.
 
EDIT: j'ai testé, mais ça a l'air buggé sous Windows: ça exécute le script, mais il n'y a pas de retour dans le script appelant (ça devrait être le cas)
 
A+,


Message édité par gilou le 10-03-2016 à 00:05:59

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-03-2016 à 00:01:06    

rat de combat a écrit :

Code :
  1. use strict;
  2. use warnings;
  3. use App::a2pdf;


faudra faire gaffe à creer un répertoire App et y copier le module a2pdf.pm
et j'ai modifié ton post: la balise doit être code=perl, et non pas code="perl" pour que marche la coloration syntactique.
 
A+,

Message cité 1 fois
Message édité par gilou le 10-03-2016 à 00:03:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-03-2016 à 08:33:27    

Bonjour rat de combat j'ai fais un system("echo 1" ) et il trouve le cmd.exe étant donné qu'il me renvoi 1

Reply

Marsh Posté le 10-03-2016 à 08:33:27   

Reply

Marsh Posté le 10-03-2016 à 08:35:25    

Bonjour Gilou,
J'ai crée le répertoire App mais je ne vois pas à quoi ressemble le module a2pdf.pm qu'est ce qu'il faut mettre à l'intérieur ?

Reply

Marsh Posté le 10-03-2016 à 09:55:02    

Bonjour Gilou je viens d'instyaller Strawberry Perl

Reply

Marsh Posté le 10-03-2016 à 11:57:58    

 
lorsque j'exécute mon programme dans Powershell j'utilise la commande la suivante :  
 
perl.exe C:\Users\baranowp\Documents\2016_03_07_11\prod\convertir_txt_pdf.pl  
 
J'obtiens ce message d'erreur :  
Can't locate Config/IniFiles.pm in @INC (you may need to install the App::a2pdf module) (@INC contains: CStrawberry/perl/site/lib CStrawberry/perl/vendor/lib CStrawberry/perl/lib .) at C:\Users\baranowp\Documents\2016_03_07_11\prod\convertir_txt_pdf.pline 3.  
BEGIN failed--compilation aborted at C:\Users\baranowp\Documents\2016_03_07_11\prod\convertir_txt_pdf.p line 3.  
 
 
 

Reply

Marsh Posté le 10-03-2016 à 13:22:16    

gilou a écrit :

faudra faire gaffe à creer un répertoire App et y copier le module a2pdf.pm


Heu... Pourquoi? J'ai juste installé a2pdf normalement (enfin presque, en ligne de commande cpan -i /a2pdf/ de mémoire et non cpan a2pdf à défaut d'avoir le nom exact), sans rien copier nul part. Le script tourne.
 

Citation :

et j'ai modifié ton post: la balise doit être code=perl, et non pas code="perl" pour que marche la coloration syntactique.


Merci, je prends note.
 
@solerian
Faut installer le module. Pour StrawberryPerl tu tappes cpan <nom du module> en ligne de commande, soit cpan Config::IniFiles.

Reply

Marsh Posté le 10-03-2016 à 13:40:49    

C'est quoi la différence entre cpan -i Config::IniFlies et cpan Config::IniFlies

Reply

Marsh Posté le 10-03-2016 à 13:45:19    

RTFM :o

 
Citation :

# install modules ( sole -i is optional )

 

Autrement dit, pas de différence.


Message édité par rat de combat le 10-03-2016 à 13:45:35
Reply

Marsh Posté le 10-03-2016 à 13:58:56    

Quand je fais un cpan App::a2pdf ça ne fonctionne il me met un message d'erreur et lorsque je fais cpan Config::IniFiles ça fonctionne mais quand j'exécute le programme il me dis qu'il y a une erreur dans le fichier PM

Reply

Marsh Posté le 10-03-2016 à 14:05:53    

Sois plus précis (messages d'erreurs). Le a2pdf a un nom légèrement différent, il faut utiliser -i /a2pdf/ pour faire une recherche (les // délimitent une expression Regex), pour Config::IniFiles on peut se passer du -i (mais ça devrait aussi marcher avec).
 
edit: Le nom exact semble être App::a2pdf


Message édité par rat de combat le 10-03-2016 à 14:13:56
Reply

Marsh Posté le 10-03-2016 à 14:06:57    

solerian a écrit :

Bonjour Gilou,
J'ai crée le répertoire App mais je ne vois pas à quoi ressemble le module a2pdf.pm qu'est ce qu'il faut mettre à l'intérieur ?

Si tu browses les sources de a2pdf, tu vois qu'il y a un répertoire App et qu'il ciontient un seul fichier, a2pdf.pm
 
Mais de toute façon, comme la solution avec un do (normalement préférable, puisqu'elle ne déclenche pas la création d'une nouvelle instance de l'interpréteur) n'a pas l'air de marcher sous Windows  (je subodore un pb spécifique à Windows: chez moi, ça s’exécute une fois et créée le fichier pdf, mais ensuite, au lieu de sortir du bloc {...} et de continuer l'exécution du script, ça sort du script, sans indiquer la moindre erreur), inutile de persévérer dans cette voie, autant utiliser la solution du rongeur combatif.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-03-2016 à 14:15:22    

Mais la solution du rongeur combatif fait appel au module App::a2pdf, que je n'arrive pas à installer

Reply

Marsh Posté le 10-03-2016 à 14:19:26    

solerian a écrit :

Mais la solution du rongeur combatif fait appel au module App::a2pdf, que je n'arrive pas à installer


Comme je disais, sois plus précis, donne les messages d'erreurs.

Reply

Marsh Posté le 10-03-2016 à 14:30:28    

Premier message c'est au niveau de la compilation :  
Can't locate App/a2pdf.pm in @INC (you may need to install the App::a2pdf module) (@INC contains: C:/Strawberry/perl/site/lib C:/Strawberry/perl/vendor/lib C:/Strawberry/perl/lib .) at autre_methode_conversion.pl line 3.
BEGIN failed--compilation aborted at autre_methode_conversion.pl line 3.
 
Et le seconde c'est au niveau de l'interpréteur quand j'exécute la commande perl :
Can't call method "val" on an undefined value at C:\users\baranowp\Documents\2016_03_07_11\param.pl line 9.

Reply

Marsh Posté le 10-03-2016 à 14:34:43    

Je me suis trompé il n'y a qu'un seul message d'erreur c'est que celui la :
Can't locate App/a2pdf.pm in @INC (you may need to install the App::a2pdf module) (@INC contains: CStrawberry/perl/site/lib CStrawberry/perl/vendor/lib CStrawberry/perl/lib .) at autre_methode_conversion.pl line 3.  
BEGIN failed--compilation aborted at autre_methode_conversion.pl line 3.  

Reply

Marsh Posté le 10-03-2016 à 14:39:29    

Tu as installé le module? Refait un cpan App::a2pdf en ligne de commande.
 
edit: correction, décidément...
edit2: recorrection...


Message édité par rat de combat le 10-03-2016 à 15:20:52
Reply

Marsh Posté le 10-03-2016 à 15:03:05    

je refais un cpan App::a2df :
Voici le resultat que cette commande me renvoi :
 
Loading internal null logger. Install Log::Log4perl for logging messages
CPAN: CPAN::SQLite loaded ok (v0.211)
Database was generated on Thu, 10 Mar 2016 09:16:27 GMT
 
CPAN: Module::CoreList loaded ok (v5.20151220)
Config::IniFiles is up to date (2.88).
 
C:\Users\baranowp>cpan App::a2df
Loading internal null logger. Install Log::Log4perl for logging messages
CPAN: CPAN::SQLite loaded ok (v0.211)
Database was generated on Thu, 10 Mar 2016 09:16:27 GMT
Warning: Cannot install App::a2df, don't know what it is.
Try the command
    i /App::a2df/
to find objects with matching identifiers.
CPAN: Time::HiRes loaded ok (v1.9728)

Reply

Marsh Posté le 10-03-2016 à 15:20:01    

Pardon, c'est App::a2pdf bien sûr, erreur de ma part.
 
Donc je confirme: cpan App::a2pdf

Reply

Marsh Posté le 10-03-2016 à 16:03:49    

ça ne fonctionne toujours pas :
Test Summary Report
-------------------
t/compile.t (Wstat: 256 Tests: 1 Failed: 1)
  Failed test:  1
  Non-zero exit status: 1
Files=2, Tests=4,  1 wallclock secs ( 0.03 usr +  0.05 sys =  0.08 CPU)
Result: FAIL
Failed 1/2 test programs. 1/4 subtests failed.
dmake.exe:  Error code 255, while making 'test_dynamic'
  JONALLEN/a2pdf-1.13.tar.gz
  C:\STRAWB~1\c\bin\dmake.exe test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
  reports JONALLEN/a2pdf-1.13.tar.gz
Stopping: 'install' failed for 'App::a2pdf'.

Reply

Marsh Posté le 10-03-2016 à 16:18:04    

étrange... Il me semble qu'il y a une dépendance qui manquait lors de l'install mais je ne me souviens pas exactement... Tu peux voir plus haut dans les messages qu'imprime cpan si il n'y a pas quelque chose dans cette direction?

 

Après avoir regardé dans le code, à tout hasard, est-ce que Switch est installé chez toi? Pour savoir tu tappes cpan -D Switch. Si ce n'est pas installé tu peux toujours le faire et réssayer après le a2pdf mais à tes risques...

 

edit +1 pour Switch après avoir regardé quand est-ce que le fichier de mon installation a été modifié...


Message édité par rat de combat le 10-03-2016 à 16:19:36
Reply

Marsh Posté le 10-03-2016 à 16:45:59    

Voici ce que me renvoi la commande cpan -D Switch :
Loading internal null logger. Install Log::Log4perl for logging messages
CPAN: CPAN::SQLite loaded ok (v0.211)
Database was generated on Thu, 10 Mar 2016 09:16:27 GMT
 
(no description)
C/CH/CHORNY/Switch-2.17.tar.gz
(no installation file)
Installed: not installed
CPAN:      2.17  Not up to date
Alexandr Ciornii (CHORNY)
alexchorny@gmail.com

Reply

Marsh Posté le 10-03-2016 à 16:52:56    

Je viens de trouver un module PDF  
PDf::create j'ai réussi à l'installer avec cpan PDF::Create

Reply

Marsh Posté le 10-03-2016 à 16:54:21    

Alors cpan Switch puis cpan App::a2pdf . Mais bon, apparemment il y en a plus besoin.

Reply

Marsh Posté le 10-03-2016 à 16:56:25    

le cpan App::a2pdf ça ne fonctionne pas même avec l'utilisation de cpan switch.

Reply

Marsh Posté le 10-03-2016 à 18:23:42    

Voila pourquoi j'utilise le Perl d'active state sous Windows, leur package manager ppm fait tout ce boulot sans qu'on ait a se prendre la tête.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-03-2016 à 18:41:59    

solerian a écrit :

le cpan App::a2pdf ça ne fonctionne pas même avec l'utilisation de cpan switch.


J'ai pourtant réussi à l'installer (sous Strawberry)... C'est quoi l'erreur, toujours ce problème de test? (simple curiosité)

 

As-tu déjà utilisé/testé PDF::Create? D'après la doc c'est un peu plus bas niveau dans le sens où il faut préciser des coordonnées pour insérer du texte dans le pdf.


Message édité par rat de combat le 10-03-2016 à 18:42:37
Reply

Marsh Posté le 10-03-2016 à 19:26:06    

Ah! J'ai pigé pourquoi le do ne semblait pas marcher (en fait ça marche).
C'est parce qu'au cours de l'exécution du do 'a2pdf', STDOUT est fermé (ou bien dérouté vers un fichier) et pas rouvert, donc je voyais pas mes print du script principal.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-03-2016 à 10:12:04    

J'utilise maintenat le module PDF::API2.
Quelqu'un connait ?

Reply

Marsh Posté le 11-03-2016 à 18:06:51    

C'est pour cela qu'on t'a dit d'utiliser App::a2pdf, comme le fait RdC dans son exemple, parce que App::a2pdf fait le boulot avec PDF::API2 pour toi, mais en te simplifiant la tache un maximum.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-03-2016 à 09:53:17    

Bonjour,
Je ne vois pas comment faire pour dire à mon pogramme de convertir les .ldt en .pdf.
J'ai trouvé sur internet une fonction convert
Est-ce que vous la connaissez? et est-ce que je peux l'utiliser dans mon programme ?
 
Cordialment

Reply

Marsh Posté le 14-03-2016 à 11:10:28    

C'est .ldt, maintenant? plus .lst?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-03-2016 à 11:43:58    

C'est toujours .lst j'ai fait une faute de frappe

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed