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

Delphi Discussion :

Ghostscript et PDF


Sujet :

Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut Ghostscript et PDF
    Bonjour,
    Je tente de convertir un pdf en txt.
    J'utilise les unités GhostTools.pas et gsapi.pas dans mon projet.
    CF ce post: https://stackoverflow.com/questions/...89424#45689424

    La procédure à appeler est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure PDS2TXT(input : AnsiString; output: AnsiString);
    Je ne retourne rien avec ce code: (qui compile sans erreur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    opendialog1.Execute();
    memo1.Lines.Append(opendialog1.FileName);
    PDF2TXT.input:=opendialog1.FileName;
    PDF2TXT.output:='test';
    PDF2TXT.Form1.Update;
    end;
    Par contre quand j'utilise ce code, j,ai une erreur '.' attendu mais '(' trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PDF2TXT.input:=opendialog1.FileName;
    PDF2TXT.output:='test';
    PDF2TXT(input,output)   //'.' attendu mais '(' trouvé
    Merci pour vos suggestions
    Phil

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 855
    Points : 11 288
    Points
    11 288
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il pourrait être édifiant d'ajouter au Memo la ligne d'arguments envoyée à la gsapi.

    Je tenterais bien aussi un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with OpenDialog1 do
    begin
      if Execute then
      begin
        S:=FileName;
        Memo1.Lines.Add(S);
        PDF2TXT.input:=S;
        PDF2TXT.output:='test';
        Form1.Update;
      end;
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Merci Tourlourou, mais malheureusement celà ne génère rien :-(

  4. #4
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Voici le code appelé:
    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
    procedure PDF2TXT(input : AnsiString; output: AnsiString);
    var   ExitCode:integer;
      instance: Pointer;
          Arg: array of PAnsiChar;
    begin
      ExitCode := gsapi_new_instance(instance, nil);
      if ExitCode < 0 then
        raise Exception.Create('Impossible to open an instance of ghostscript. Error ExitCode: '+IntToStr(ExitCode));
      try
        SetLength(Arg, 5);
        Arg[0] := PAnsiChar('-dBATCH');
        Arg[1] := PAnsiChar('-dNOPAUSE');
        Arg[2] := PAnsiChar('-sDEVICE=txtwrite');
        Arg[3] := PAnsiChar('-sOutputFile='+ output + '.txt' );
        Arg[4] := PAnsiChar(input);
     
        ExitCode := gsapi_init_with_args(instance, Length(Arg), @Arg[0]);
        if ExitCode < 0 then raise Exception.Create('ERROR: init_args: '+IntToStr(ExitCode));
        gsapi_exit(instance);
      finally
        gsapi_delete_instance(instance);
      end;
    end;
    La dernière version de gsdll32.dll est présente dans le dossier de l'exécutable, ainsi que Ghosttools.dcu et gsapi.dcu

    Le code compile bien mais aucun fichier n'est généré...

    Merci pour vos idées

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 855
    Points : 11 288
    Points
    11 288
    Billets dans le blog
    6
    Par défaut
    Que donne l'affichage des arguments ?
    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
    procedure PDF2TXT(input : AnsiString; output: AnsiString);
    var   ExitCode:integer;
      instance: Pointer;
          Arg: array of PAnsiChar;
    begin
      ExitCode := gsapi_new_instance(instance, nil);
      if ExitCode < 0 then
        raise Exception.Create('Impossible to open an instance of ghostscript. Error ExitCode: '+IntToStr(ExitCode));
      try
        SetLength(Arg, 5);
        Arg[0] := PAnsiChar('-dBATCH');
        Arg[1] := PAnsiChar('-dNOPAUSE');
        Arg[2] := PAnsiChar('-sDEVICE=txtwrite');
        Arg[3] := PAnsiChar('-sOutputFile='+ output + '.txt' );
        Arg[4] := PAnsiChar(input);
     
    // pê pas le code exact... mais l'idée y est !
    msg:=nil;
    esp:=' ';
    for i:=0 to 4 do begin msg:=Strcat(msg, Arg[i]); msg:=Strcat(msg,esp); end;
    ShowMessage(msg);
     
        ExitCode := gsapi_init_with_args(instance, Length(Arg), @Arg[0]);
        if ExitCode < 0 then raise Exception.Create('ERROR: init_args: '+IntToStr(ExitCode));
        gsapi_exit(instance);
      finally
        gsapi_delete_instance(instance);
      end;
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Bonsoir Tourlourou,
    Malheureusement je n'arrive pas à faire tourner mon appli avec cette procédure.
    Elle est déjà contenue dans l'unité GhostTools.pas
    Peux-tu m'éclairer?

    Merci pour ton aide,
    PhilLu

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 855
    Points : 11 288
    Points
    11 288
    Billets dans le blog
    6
    Par défaut
    Et que donne ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with OpenDialog1 do
    begin
      if Execute then
      begin
        S:=FileName;
        PDF2TXT(S, 'test');
      end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 86
    Points : 375
    Points
    375
    Par défaut
    Bonjour.
    La procédure à appeler est PDF2TXT ou PDS2TXT ?

    Dans le premier cas, il y a donc une procédure et un objet avec le même nom. J'imagine alors qu'il y a conflit, ou alors l'unité qui contient la procédure n'est pas déclarée dans tes uses, donc quand tu appelles la procédure, elle n'est pas trouvée.

    Dans le second cas, il y a une coquille dans ton code sur l'appel de la procédure (un F à la place d'un S).

    Dans tous les cas avoir à la suite deux lignes de code comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PDF2TXT.methode
    PDF2TXT(Arg, Arg)
    est très troublant.

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