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 :

[iText][jfreechart] problème de génération de PDF


Sujet :

Documents Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 743
    Points
    743
    Par défaut [iText][jfreechart] problème de génération de PDF
    Salux !

    Ma question va certainement se terminer en RTFM, dans ce cas merci de me donner le lien, j'ai toujours pas trouvé ce fucking manual...

    Je génère une série de graphiques que j'exporte aussitôt dans un fichier PDF. Petite précision, le PDF en question ne contient aucun texte, seulement ces graphiques.

    Pourtant, lors de la génération, iText lève une exception de manière totalement aléatoire (la majorité du temps il n'y a pas de problème), avec les mêmes graphiques, et ce concernant n'importe quel graphique...

    Bref, l'exception me retourne ce message :
    Unbalanced save/restore state operators.
    J'ai cherché sur Google, les fonctions saveState() et restoreState() de PdfContentByte doivent être exécutées le même nombre de fois, or je ne les appelle jamais...

    Voici 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
    44
    45
    46
    47
    48
    49
    /*
     * Génération du PDF
     */
    // dimensions de la page
    int width = 840, height = 594;
    // marges
    int vmargin = 20, hmargin = 20;
    Rectangle pageSize = new Rectangle( width, height );
    Document pdfout = new Document( pageSize );
    PdfWriter writer = PdfWriter.getInstance( pdfout, new FileOutputStream( path ) );
    pdfout.open();
    pdfout.addTitle( "CA par catégorie" );
     
    PdfContentByte cb = writer.getDirectContent();
     
    // le cadre dans lequel on va dessiner prend toute la page...
    Graphics2D g2 = cb.createGraphics( width, height );
     
    // ... mais le graphique compense avec les marges
    Rectangle2D rec = new Rectangle2D.Double( hmargin, vmargin, width - 2 * hmargin, height - 2 * vmargin );
    chart.draw( g2, rec );
     
    progress.setValue( 1 );
     
    try
    {
    	if( graph )
    	{
    		for( i = 0; i < catNames.size(); i++ )
    		{
    			pdfout.newPage();
     
    			cb.beginText();
    			cb.setFontAndSize( BaseFont.createFont( BaseFont.TIMES_ROMAN, "UTF-8", false ), 12 );
    			g2 = cb.createGraphics( width, height );
    			rec = new Rectangle2D.Double( hmargin, vmargin, width - 2 * hmargin, height - 2 * vmargin );
    			chronoChart[i].draw( g2, rec );
     
    			progress.setValue( i + 1 );
    		}
    	}
     
    	g2.dispose();
    } catch( Exception e )
    {
    	System.out.println( e.getMessage() );
    }
     
    pdfout.close();
    Note : progress est une barre de progression.
    Note2 : j'ai du bricoler certaines lignes pour que ça marche, si le problème vient de là, signalez-le moi

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 743
    Points
    743
    Par défaut
    Je progresse !

    Tout d'abord, c'est newPage() qui fout la zone (j'ai testé sans et je n'ai plus aucun souci).

    Le plus bizarre dans l'affaire c'est qu'il semble lever une exception, j'ai remplacé la ligne pdfout.newpage(); par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( !pdfout.newpage() )
        System.out.println( "problème" );
    Et rien ne se passe, le plus étonnant, c'est qu'apparement il n'y a pas d'exception levée, puisque le catch{} ne se déclenche pas.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Hello,

    Tu aurais une initialisation bidon de chronoChart afin de pouvoir compiler et exécuter ton morceau de code ?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 743
    Points
    743
    Par défaut
    Bon, c'est auto-résolu, c'est les beginText()+endText() qui foutaient la zone.

    Je les ai jarté et hop ! Roulez jeunesse !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/10/2013, 08h43
  2. Problème de génération de PDF avec un .jar
    Par cysboy dans le forum iReport
    Réponses: 2
    Dernier message: 19/11/2008, 09h50
  3. Problème de génération de pdf avec Birt
    Par nabolo dans le forum BIRT
    Réponses: 2
    Dernier message: 15/11/2007, 09h36
  4. [iText] Conseils sur la génération de pdf
    Par GreenJay dans le forum Documents
    Réponses: 6
    Dernier message: 25/03/2005, 01h49

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