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 :

Convertir des .xls en .pdf


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Convertir des .xls en .pdf
    Salut.

    Voilà, je dois convertir "automatiquement" des feuilles de calcul Excel en .pdf.
    Mes feuilles de calcul sont générées en Java pour créer des fichiers temporaires puis en Delphi qui recopie les fichier temporaires dans les .xls.
    Mon but maintenant est de convertir l'un des onglets de mes feuilles Excel en .pdf afinde les rendre au client.

    J'ai pensé à 2 solutions :

    - Gérer une impression avec PDFCreator
    - Créer des PDF directement en recopiant le contenu de la feuille excel dans un fichier .pdf

    Déjà j'aimerais votre avis sur la meilleur solution.

    Pour la première possibilité la question est la suivante : Existe-t-il un moyen "simple" (en Java ou Delphi car ce sont les seuls langages que je connais) pour ouvrir un fichier et lancer une impression avec PDFCreator.
    Pour la deuxième possibilité : Est-ce possible ?

    Merci d'avance.

  2. #2
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut Pdf995
    C'est un petit utilitaire sympa que tu installe et qui s'utilise comme une imprimante. Il est gratuit pour les particuliers (moyennant un affichage publicitaire obligatoire)http://www.pdf995.com/download.html
    Je l'utilise et en suis contant.
    Melk.

  3. #3
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Salut,
    Je n'ai jamais essayé mais j'aurais dit que le plus simple aurait été d'interfacer Open Office.
    Tu as une FAQ là dessus : http://delphi.developpez.com/faq/?pa...engeneimprimer

    Laisse un message quand tu y seras arrivé : je pense que ça interesse du monde.

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Salut !

    Je viens raconter l'évolution.

    Après test, l'utilisation de l'API Open Office s'est révélée inefficace, notamment au niveau du style, car les feuilles sont très travaillées (avec notamment des images et des graphes).
    La seule solution est donc de faire un programme qui ouvre Excel, sélectionne le bon onglet et lance une impression avec PDFCreator ou PDF955. Je ne sais pas lequel est le plus simpel à gérer.

    Savez-vous comment gérer une impression depuis un fichier ouvert en fond ?

  5. #5
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut
    Voila ce que j'utilise:
    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 TForm1.GDT_PrintEnttClick(Sender: TObject);
    var
       vMSExcel,
       vXLClasseurs,
       vXLClasseur,
       vFeuille      : variant;
    begin
      vMSExcel := CreateOleObject('Excel.Application');
      vMSExcel.Visible := False;
      try
        vXLClasseurs := vMSExcel.Workbooks;
        vXLClasseur  := vXLClasseurs.Open( MonFichier.Text,unassigned,False);
        vFeuille     := vXLClasseur.WorkSheets[1];
        vMSExcel.DisplayAlerts := False;                   // pas de message d'alerte
        vFeuille.Range['A1'].Value := Com.Text;            // Commune 
        vFeuille.Range['B1'].Value := Lib.Text;            // Libellé 
        vFeuille.Range['F1'].Value := Num.Text;            // N° 
        vFeuille.Range['G1'].Value := DatRecu.Date;        // Date de réception 
        vFeuille.PrintOut(1,1,1,False ,EmptyParam,False,EmptyParam,EmptyParam);
      finally
        vXLClasseur.Close;   //   vXLWorkbook.Close(vSaveChanges, aFileName);
        vMSExcel.DisplayAlerts := True ;                  // message d'alerte en route
        vMSExcel.Quit;                                         // Ferme Excel
      end;
      VarClear(vMSExcel);                                    // Variant effacé
      VarClear(vXLClasseurs);                               // Variant effacé
      VarClear(vXLClasseur);                                // Variant effacé
      VarClear(vFeuille);                                       // Variant effacé
    end;
    Sachant que j'ai défini PDF995 comme imprimante par défaut.
    ça fonctionne trè bien pour moi (C'est un code que j'ai, en quasi totalité, trouvé sur ce site (Merci aux véritables concepteurs).

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup !

    Cette portion de code va m'être très utile une fois adaptée.
    Quelques questions subsistent :
    - A quoi correspondent les différents paramètres de PrintOut ? (je sais que les premiers sont les nombres de copies et les pages)
    - Comment entrer le nom de fichier que l'on souhaite dans PDF995 ?

  7. #7
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par Opera140
    Merci beaucoup !

    Cette portion de code va m'être très utile une fois adaptée.
    Quelques questions subsistent :
    - A quoi correspondent les différents paramètres de PrintOut ? (je sais que les premiers sont les nombres de copies et les pages)
    Ceci est issu de l'aide d'Excel:
    expression.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)

    expression Obligatoire. Expression qui renvoie un des objets répertoriés dans la liste S'applique à.

    From Argument de type Variant facultatif. Numéro de la page à partir de laquelle commence l'impression. Si vous ne spécifiez pas cet argument, l'impression commence à la première page.

    To Argument de type Variant facultatif. Numéro de la dernière page à imprimer. Si vous ne spécifiez pas cet argument, l'impression s'effectue jusqu'à la dernière page.

    Copies Argument de type Variant facultatif. Nombre de copies à imprimer. Si vous ne spécifiez pas cet argument, une seule copie est imprimée.

    Preview Argument de type Variant facultatif. Affectez-lui la valeur True pour que Microsoft Excel affiche un aperçu de l'objet avant de l'imprimer. Affectez-lui la valeur False (ou ne le spécifiez pas) pour imprimer l'objet immédiatement.

    ActivePrinter Argument de type Variant facultatif. Définit le nom de l'imprimante active.

    PrintToFile Argument de type Variant facultatif. Affectez-lui la valeur True pour imprimer dans un fichier. Si vous ne spécifiez pas PrToFileName, Microsoft Excel invite l'utilisateur à entrer le nom du fichier de sortie.

    Collate Argument de type Variant facultatif. Affectez-lui la valeur True pour assembler plusieurs copies.

    PrToFileName Argument de type Variant facultatif. Si l'argument PrintToFile a la valeur True, cet argument spécifie le nom du fichier vers lequel vous souhaitez effectuer l'impression.

    Notes
    Les « pages » évoquées dans la description des arguments From et To font référence aux pages imprimées et non à toutes les pages de la feuille ou du classeur.

    Exemple
    Cet exemple montre comment imprimer la feuille active.

    ActiveSheet.PrintOut
    - Comment entrer le nom de fichier que l'on souhaite dans PDF995 ?
    Au moment de l'impression une boite de dialogue "enregistrer sous" demande le nom du fichier à créer. C'est simple et efficace.

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Au moment de l'impression une boite de dialogue "enregistrer sous" demande le nom du fichier à créer. C'est simple et efficace.
    Justement le but serait "d'automatiser" cette partie et de rentrer comme nom de fichier le nom de mon choix.
    Le but étant de pourvoir générer X fichiers .pdf à aprtir de X fichier .xls sans avoir à saisir le nom à chaque fois en reprenant par exemple le nom du fichier .xls.

  9. #9
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par Opera140
    Justement le but serait "d'automatiser" cette partie et de rentrer comme nom de fichier le nom de mon choix.
    Le but étant de pourvoir générer X fichiers .pdf à aprtir de X fichier .xls sans avoir à saisir le nom à chaque fois en reprenant par exemple le nom du fichier .xls.
    Je n'imprime qu'un fichier à la fois, cela me convient donc pour le moment.
    Je n'ai pas cherché plus loin. Par contre, quand tu auras trouvé, pense aux copains. A+

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Il existe dans PDFCreator une option permettant d'enregistrer automatiquement le document sans avoir à passer par la fenêtre "enregistrer sous".
    Il est possible de configurer le programme pour que le .pdf aie le même nom que le fichier d'origine.

    J'ouvre donc mes fichiers comme il se doit et lance une impression standard avec cet appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vMSExcel.ActivePrinter[0]:='PDFCreator';
    vFeuille.PrintOut(1,2,1,False ,EmptyParam,False,EmptyParam,EmptyParam);

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Mon programme est terminé. Voici le code exact qui me permet de convertir X fichier .xls en X fichier .pdf de même nom.

    Il s'agit d'abord de configurer PDFCreator pour que le fichier .pdf ait le même nom que le fichier .xls ainsi que de régler le chemin du dossier dans lequel seront enregistrés les fichiers .pdf.
    Pour celà, il suffit de lancer une impression quelconque avec PDFCreator et de cliquer sur Options et d'effectuer les réglages correspondants.

    Ensuite le code :
    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
    var
       DirSTL : TStringList;
     
    procedure TForm1.Conversion(Liste: TStringList; taille : Integer);
    var
      i : Integer;
      vMSExcel, vXLClasseurs, vXLClasseur, vFeuille : variant;
    begin
      vMSExcel := CreateOleObject('Excel.Application');
      vMSExcel.visible := False;
      for i:=0 to taille-1 do
      begin
        vXLClasseurs := vMSExcel.Workbooks;
        Memo1.Lines.add('Ouverture du fichier : '+Liste[i]);
        vXLClasseur  := vXLClasseurs.Open(Liste[i],unassigned,False);
        try
          vFeuille     := vXLClasseur.WorkSheets[3];
          vFeuille.PrintOut(1, 2, 1, False, 'PDFCreator', False, False, EmptyParam);
        except on erreur:EOleException do
          ShowMessage('Erreur : '+inttostr(erreur.ErrorCode));
        end;
      end;
      ShowMessage('Conversion terminée');
      vXLClasseur.Close;
      vMSExcel.DisplayAlerts := true;
      vMSExcel.Quit;
      Form1.Close;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DirSTL := TStringList.Create;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      DirSTL.LoadFromFile('MonPath\Liste.txt');
      Memo1.Lines.add('Conversion en PDF des fichiers');
      ShowMessage('Nombre de fichiers : ' + intToStr(DirSTL.count));
      DirSTL.SaveToFile('MonPath\Liste2.txt');
      Conversion(DirSTL, DirSTL.count);
    end;
    end.
    Merci pour votre aide.

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

Discussions similaires

  1. Convertir des tiff en pdf
    Par PadawanInPerl dans le forum Modules
    Réponses: 34
    Dernier message: 03/11/2009, 16h28
  2. Convertir des documents en ( pdf et jpg )
    Par Loubna.B dans le forum C#
    Réponses: 7
    Dernier message: 28/09/2009, 16h46
  3. Convertir des odt en pdf, est-ce possible?
    Par mic13120 dans le forum Documents
    Réponses: 9
    Dernier message: 20/12/2007, 16h17
  4. Convertir des .xls en .pdf
    Par Opera140 dans le forum Documents
    Réponses: 2
    Dernier message: 19/03/2007, 22h31
  5. Installer un cgi pour convertir des html en pdf
    Par sami_c dans le forum Apache
    Réponses: 3
    Dernier message: 23/03/2006, 14h36

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