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

Documents Java Discussion :

Générer un PDF en Java


Sujet :

Documents Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Points : 29
    Points
    29
    Par défaut Générer un PDF en Java
    Bonjour,

    Je développe un programme en utilisant JDBC et j'aimerais, à partir des informations stockées dans la base, générer un PDF pour ensuite pouvoir l'imprimer (concrètement c'est une facture).

    J'ai vu dans la FAQ qu'il faut utiliser une certaine API mais je ne vois pas du tout comment ça fonctionne.

    Quelqu'un saurait-il m'expliquer comment procéder ?

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 85
    Points
    85
    Par défaut
    Bonjour,

    Regarde du côté de iText, c'est la meilleure API libre du moment pour générer du PDF: http://itextpdf.com/download.php

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Je suis allé voir la page, par contre ça s'installe comment une API et on l'utilise comment dans le code pour dire que l'on fait appel à elle ?

  4. #4
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 85
    Points
    85
    Par défaut
    Dans le code il faut déclarer des imports des classes que tu utilises et il faut préciser le ou les jar dans le CLASSPATH lors de l'exécution.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Peut-on utiliser 2 CLASSPATH pour exécuter le programme ?
    Car moi je fais du JDBC donc je passe déjà dans le CLASSPATH le driver.

  6. #6
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 85
    Points
    85
    Par défaut
    Tu peux mettre autant de chemins que tu veux, il suffit de les séparer par un point virgule ;

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Bonjour,

    Voici ce que moi j'ai fait dans le même genre d'application.

    La première chose, c'est effectivement d'inclure le jar iText à ton projet.

    Ensuite, pour générer un PDF, tu as besoin d'utiliser un certain nombre de classes de cette bibliothèque. On va prendre les plus simples déjà, c'est-a-dire les imports d'images, de polices, de textes et avec le positionnement...

    Lorsque l'import de la bibliothèque est fait correctement, tu vas avoir besoin (du moins dans un premier temps) des packages com.lowagie.text et com.lowagie.text.pdf. Tu les importes donc avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import com.lowagie.text.*;
    import com.lowagie.text.pdf.*;
    Tu as besoin d'un objet de type Document, d'un de type PDFWriter et d'un de type PDFContentByte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private Document MyPDF;
    private PdfWriter MyWriter;
    private PdfContentByte cb;
    Il faut les initialiser, a priori pour le Document, avec un exemple en A4, ça donne quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MyPDF = new Document(PageSize.A4, 50, 50, 50, 50);
    MyWriter = PdfWriter.getInstance(MyPDF,PDFOutputStream);
    MyPDF.open();
    cb = MyWriter.getDirectContent();
    cb.saveState();
    Pour mon cas, l'application était en servlet, donc l'objet PDFOutputStream correspondait au stream de la servlet.

    Ca peut aussi bien être un flux vers un fichier...
    Tu dois bien sûr ouvrir ton Document avant de créer ton PDFContentByte, et sauver ton état...

    Ensuite, tu dois intégrer les données dans ton PDFContentByte (cb)

    Pour l'ajout d'images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Image CurentImage = Image.getInstance(ImageURL);
    CurentImage.setAbsolutePosition(PosX,PosY);
    CurentImage.scalePercent(ScalePerCent);
    CurentImage.setRotationDegrees(Rotation);
    PDFDoc.addImage(CurentImage);
    Dans un bloc try/catch, parce que tu as des erreurs à gérer...

    Pour l'ajout de textes, je te conseille d'utiliser des objets Chunk, ça te permet de gérer tes polices en dynamique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chunk CurentChunk = new PDFChunk().GetChunk(text,"NORMAL",PoliceName,PoliceTaille);
    text étant le texte que tu veux ajouter en String, PoliceName étant un String permettant de déterminer ta police, et donnant le chemin d'accès jusqu'au fichier ttf correspondant à la police (exemple : C:\MesPolices\arial.ttf), et PoliceTaille étant la taille souhaitée (int).
    Le champ NORMAL ne sert pas si tu utilises des polices ttf car les polices normales, grasses, italiques et grasses ET italiques sont différentes en ttf...

    Tu peux ensuite souligner et tramer ta police :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CurentChunk.setUnderline(null,1,0,-2,0,PdfContentByte.LINE_CAP_BUTT);
    CurentChunk.setBackground(Color.lightGray);
    Les paramètres pour setUnderLine permettent de déterminer la position du trait, à toi de voir comment tu le veux...
    Pour le setBackground, il te faut importer java.awt.Color.

    Tu termines ensuite en créant une nouvelle colonne de texte par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ColumnText ct = new ColumnText(PDFDoc);
    ct.setSimpleColumn(llx,lly,urx,ury,0,Element.ALIGN_LEFT);
    ct.addText(CurentChunk);
    Pour setSimpleColumn, les paramètres sont llx et lly, les coordonnées du point en bas à gauche, pour urx et ury les coordonnées du point en haut à droite, le 0 correspond à la marge à partir de laquelle tu écris ton texte et le Element.ALIGN_LEFT pour aligner (tu as indifféremment, droite, gauche, centré, justifié, ...).

    Tu termines par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try 
    {
        ....
        ct.go();
    } 
    catch (DocumentException e) 
    {
        // Gestion de l'erreur
        ....
    }
    Lorsque tu as ajouté tes images et ton texte et que tu as fini, n'oublie pas de fermer ton Document et ton stream.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyPDF.close();
    PDFOutputStream.close();
    J'ai probablement oublié des blocs try/catch de-ci de-là mais dans l'ensemble, ça fonctionne pas trop mal comme ça...

    Bon courage !

  8. #8
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 037
    Points
    17 037

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

Discussions similaires

  1. Quel outil pour générer un PDF en Java EE ?
    Par Yoru17 dans le forum Développement Web en Java
    Réponses: 10
    Dernier message: 21/09/2015, 18h14
  2. Générer un PDF en Java
    Par oumarc7 dans le forum NetBeans
    Réponses: 7
    Dernier message: 08/05/2015, 01h55
  3. Générer des PDF avec Java
    Par zomurn dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 09/08/2011, 18h41
  4. Générer fichiers word ou pdf via java.
    Par tapoutapou dans le forum Documents
    Réponses: 4
    Dernier message: 15/07/2010, 18h02
  5. Librairies gratuites pour générer du PDF
    Par Noxexplorer dans le forum ASP
    Réponses: 2
    Dernier message: 02/05/2005, 21h18

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