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]Conversion txt en pdf :The document has no pages


Sujet :

Documents Java

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Points : 14
    Points
    14
    Par défaut [Itext]Conversion txt en pdf :The document has no pages
    Bonjour tout le monde,

    J’ai un petit problème de conversion simple d'un fichier txt en pdf qui n'apparait que quand le fichier txt ne contient qu’une seule ligne.
    l'erreur est : The document has no pages
    Je suis presque sûre que c’est un problème de close mal placé.
    Voici mon 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
     
    private static String createPdf(String urlInputFile, String urlOutputFile)
    	{
     
    		Document pdfDocument = new Document();
    		String line = "";
    		try
    		{
    			FileOutputStream fileOutputStream = new FileOutputStream(urlOutputFile);
    			PdfWriter writer = null;
    			writer = PdfWriter.getInstance(pdfDocument, fileOutputStream);
    			writer.open();
    			pdfDocument.open();
    			File file = new File(urlInputFile);
    			line = FileUtils.readFileToString(file);
    			pdfDocument.add(new Paragraph(line));
     
    			if (null != pdfDocument) {
    				pdfDocument.close();
    			}
    			if (null != writer) {
    				writer.close();
    			}
     
    		}
    		catch (Exception exception)
    		{
    			System.out.println("Document Exception!" + exception);
    		}
    		return urlOutputFile;
    	}
    Si vous pouviez m’aider je vous en serais grès.
    Ça n’a pas marché avec le code suivant non plus, même erreur :

    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
    50
    51
    52
    53
    54
    55
    56
    57
     
    public static  String convertTextfileToPDF(String urlInputFile, String urlOutputFile) throws Exception{
     
    		String URLOutputFile = urlInputFile+".pdf";
    		Document output = null;
    		BufferedReader input = null;
    		PdfWriter  pdfWriter = null;
    		File file=new File(urlInputFile); 
    		try
    		{	
    			input = new BufferedReader (new FileReader(urlInputFile));
     
    			if (input.readLine() == null) {
    				throw new Exception("Fichier text vide.");
    			}
    			output = new Document(PageSize.LETTER, 40, 40, 40, 40);
     
    			pdfWriter = PdfWriter.getInstance(output, new FileOutputStream (URLOutputFile));
    			output.open();
    			String line = input.readLine();
    			while(line != null) {
    				Paragraph p = new Paragraph(line);
    				p.setAlignment(Element.ALIGN_JUSTIFIED);
    				output.add(p);
     
    			}
    			System.out.println("Fichier Text convertie en PDF :" + file.getName());
    			if (null != output) {
    				output.close();
    			}
    			if (null != input) {
    				input.close();
    			}
    			if (null != pdfWriter) {
    				pdfWriter.close();
    			}
     
    		}
    		catch (Exception e) {
    			if (null != output) {
    				output.close();
    			}
    			if (null != input) {
    				input.close();
    			}
    			if (null != pdfWriter) {
    				pdfWriter.close();
    			}
    			File fileErrorToDelete = new File(URLOutputFile);
    			fileErrorToDelete.delete();			
    			System.out.println("Erreur lors de la conversion du fichier txt : " +file.getName());
    			throw new Exception("Erreur lors de la conversion du fichier txt : " +file.getName()+ ", Erreur technique  :" +e.getMessage());
     
    		}
     
    		return URLOutputFile;	
    	}
    Ces 2 fonctions lancé dans un autre projet marchent à merveille, dans mon projet à moi ou je dois ensuite concaténer le pdf en sortie avec d’autres ça foire.
    Arigato !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour le premier cas, tu peux avoir l'erreur si line contient une chaîne vide. Je ne sais pas exactement ce que retourne FileUtils.readFileToString(File) quand un fichier ne contient qu'une ligne non vide, mais ça m'étonnera que la chaîne soit vide. Mais, soit, admettons que cela soit pour une autre raison : on ne peut pas créer un PDF vide. Tu peux bidouiller simplement en testant si line est vide (ou null tant qu'à faire), et tu remplaces par une espace. Dans ce cas, ton paragraphe sera consistant est une page sera créée.

    Pour le second cas, c'est parce que tu fais un premier readLine pour tester si ton fichier est vide : ceci consomme la première ligne. Donc s'il n'y a qu'une ligne, le second appel de readLine() retourne null, le code n'entre pas dans le while, et aucun paragraphe n'est créé. Donc il n'y a pas de pages. Fais ton test de nullité sur la variable line, lue avant de créer Document, et PDFWriter.

    Par ailleurs, le second code présente d'autres problèmes :

    • La boucle while ne lit pas les lignes suivantes dans le txt : tu as une boucle infinie
    • Il vaut mieux fermer ses streams dans un bloc finally (valable d'autant plus dans le premier code, ou si tout se passe bien, les streams ne sont pas fermés). Regardes également le try-with-resources dans la documentation, pour l'input en tout cas.
    • URLOutputFile est construit à partir de urlInputFile, c'est normal (à défaut d'être logique) ?
    • Evites de catcher des exceptions généralisées comme Exception, et soulèves également des exceptions spécialisées (Ta propre classe), au lieu de faire un throw new Exception(...)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Merci de ta reponse Effectivement line n'est pas vide, un sysout me prouve qu'il y'a bien une chaine dedans.
    Mais même en changeant un peu en ajoutant ce test j'ai toujours la même erreur "Erreur lors du traitement du package : R2D2, erreur technique ==> The document has no pages."
    voici comment est devenu la fonction :
    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
     
    public static String convertTxt(String urlInputFile, String urlOutputFile) throws Exception{
    		Document pdfDocument = new Document();
    		FileOutputStream fileOutputStream = new FileOutputStream(urlOutputFile);
    		PdfWriter writer = PdfWriter.getInstance(pdfDocument, fileOutputStream);
    		File file = new File(urlInputFile);
     
    		try
    		{			
    			String line = FileUtils.readFileToString(file);
    			if (null != line || !line.isEmpty()){
     
    				writer.open();
    				pdfDocument.open();				
    				pdfDocument.add(new Paragraph(line));
     
    			}	
    			else{
    				line = " ";
     
    				writer.open();
    				pdfDocument.open();				
    				pdfDocument.add(new Paragraph(line));
    			}
    		}
    		catch (Exception e) {
    			logger.error("Erreur lors de la conversion du fichier txt : " +file.getName());
    			logger.error("StackTrace ==> "+e.getStackTrace());
    			throw new Exception("Erreur lors de la conversion du fichier txt : " +file.getName()+ ", Erreur technique  :" +e.getMessage());  
     
    		}			
    		finally{
    			if (null != pdfDocument) {
    				pdfDocument.close();
    			}
    			if (null != writer) {
    				writer.close();
    			}
    			if (null != fileOutputStream) {
    				fileOutputStream.close();
    			}
     
     
    		}
    		return urlOutputFile;
     
    	}
    J'avoue n'avoir jamais fait des exceptions spécialisées .. ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (null != line || !line.isEmpty()){
    C'est un et, pas un ou, ici (&& pas ||). Je dirais même que tu peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String line = ...
    if (null == line || line.isEmpty()){
       line = " "; 
    }	
    writer.open();
    pdfDocument.open();				
    pdfDocument.add(new Paragraph(line));
    Une Exception, c'est une classe comme n'importe quelle autre : pour créer une exception à toi (spécialiser la classe d'Exception générale)), il suffit de faire une classe qui étend Exception.

    Cela a pour avantages, entre autre :
    • Quand tu catches, tu catches spécifiquement ton exception, donc pas les autres. Donc, dans le catch, tu as un traitement adapté aux cas que tu sais traiter (tes exceptions, donc tu sais à quoi elles correspondent et ce qu'il faut faire). Les autres exceptions, qui ont un traitement différent, ou dont le traitement est fait par un autre code, bien au dessus, sont traitées à part sans qu'il n'y ait d'interférence avec ton exception
    • Quand tu catches Exception, cela traite toutes les exceptions (comprendre toutes celles représentées par les classes Exception et celles qui étendent directement ou indirectement Exception), ce qui prend beaucoup plus de temps qu'un catch ciblé sur une exception donnée. Donc, si une méthode soulève de l'IOException, il vaut mieux catcher IOException.
    • Ceux qui utilisent ta méthode peuvent faire justement un catch( "ton exception" ), comme quand tu écris catch(IOException e) par exemple.


    Maintenant, si tu as bien une ligne non vide au début, je ne vois pas pourquoi le premier code ne fonctionnerait pas (Testé avec succès à l'instant avec la 2.1.4).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Oui ce petit code marche comme sur des roulettes dans un de mes projets "normal" en locale.. mais n'a pas l'air de vouloir passé une fois déployé sur nos serveurs AIX.
    il y'a encore du traitement après cette conversion en pdf (concaténation, renommage, déplacement.. ).. du coup je me dis qu'il ne faut vraiment pas que je rate un close() quelque part. Mais peut être que ce n'est pas du tout ça.
    Merci pour les exceptions.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Les close() ne sont pas mal placés par rapport aux spécifications Java (Il y en a peut être des inutiles (celui sur du PDFWriter, puisque celui sur le Document devrait suffir). Maintenant, est-ce qu'il y a un "truc" spécial pour AIX, je n'en sais rien. Cela m'étonnerait quand même.
    Je ne pense pas toutefois que cela vienne des close() : l'exception est soulevé par l'API IText, au moment du close() certes, mais se fait par rapport à l'état actuel de la page.

    Personnellement, j'ai plusieurs code d'export de PDF que je fais tourner sur Windows et MacOSX, sans problème. Avec de légères différences par rapport au tiens. Essayes toujours pour voir.

    Déjà, je ne créé par un PDFDocument, mais un Document (com.lowagie.text.Document). Est-ce que ça change quelque chose, je ne sais pas. Sinon, il y a 3 petites autres différences par rapport à ton code :
    1. Je n'ouvre mon Document qu'au besoin : j'ouvre toujours mon PDFWriter, mais j'ouvre mon Document que si j'ai quelquechose à écrire, et s'il n'est pas déjà ouvert évidemment. A chaque nouvelle page, je fais newPage(), sauf pour la première page (puisque il y' a l'appel de open()).
    2. Je ne ferme mon Document que si je l'ai ouvert (et je ferme toujours mon OutputStream) ;
    3. Si je ne mets rien explicitement dans une page (donc après tout open() ou newPage()), je fais pdfwriter.setPageEmpty(false) ;


    Difficile de te mettre le code complet : il est un peu volumineux (un peu plus complexe que d'écrire juste du texte dans un PDF) et je n'ai pas le temps de le simplifier pour qu'il serve d'exemple clair et pertinent.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Après suppresion des caches sur le serveur je n'ai plus d'erreur, mais il semblerait que line soit toujours vide quel que soit le contenu du fichier txt !!! mon pdf est toujours vide. Ce comportement n'est reproduit que sur le serveur.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je ne sais pas comment fonctionne readFileToString() : essayes déjà de vérifier que ton fichier existe ( genre une simple trace dans le log, du genre "PDF : Input file " + file.getAbsolutePath() + " exists = " + file.exists() ). Peut être que cette méthode retourne null quand il n'y a rien à lire... et profites-en pour vérifier le path absolu du fichier.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    En l'enlevant aussi ça n'a pas l'air de donner grand chose , erreur has no pages
    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
    50
    51
     
     
    Document pdfDocument = new Document();
    		FileOutputStream fileOutputStream = new FileOutputStream(urlOutputFile);
    		PdfWriter writer = PdfWriter.getInstance(pdfDocument, fileOutputStream);
    		File file = new File(urlInputFile);
     
    		try
    		{			
    			BufferedReader lecture=null;
     
    			try {
     
    				lecture = new BufferedReader(new FileReader(urlInputFile));
     
    			} catch (FileNotFoundException e1) {
    				System.out.println("e1 ==>  "+ e1);
     
    			}
    			writer.open();
    			pdfDocument.open();	
    			if (lecture != null) {
    				String ligne = "";
    				while ((ligne = lecture.readLine()) != null) {
    					Paragraph p = new Paragraph(ligne);				
    					pdfDocument.add(p);
     
    				}
    			}
     
     
    		}
    		catch (Exception e) {
    			System.out.println("Erreur lors de la conversion du fichier txt : " +file.getName());
    			System.out.println("StackTrace ==> "+e.getStackTrace());
    			throw new Exception("Erreur lors de la conversion du fichier txt : " +file.getName()+ ", Erreur technique  :" +e.getMessage());  
     
    		}			
    		finally{
    			if (null != pdfDocument) {
    				pdfDocument.close();
    			}
    			if (null != writer) {
    				writer.close();
    			}
    			if (null != fileOutputStream) {
    				fileOutputStream.close();
    			}	
     
    		}
    		return urlOutputFile;

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Non, mais ton fichier est bien trouvé ? Tu semblais dire que tu avais toujours null lors de la lecture ?

    En tout cas, avec ce dernier code, si rien n'est lu dans le fichier (s'il est vide), il y aura erreur : il faut appeler setPageEmpty(false) sur le writer.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Oui il renvoie parfaitement le path absolute de mon fichier. Je vais essayer cette solution une fois chez moi.
    --
    Sent from an Android device

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Salut !
    Toujours pas =/
    Pourtant il trouve bien mon document (vérifié avec un sysout)

    ExceptionConverter: java.io.IOException: The document has no pages.
    at com.lowagie.text.pdf.PdfPages.writePageTree(Unknown Source)
    at com.lowagie.text.pdf.PdfWriter.close(Unknown Source)
    at com.lowagie.text.pdf.PdfDocument.close(Unknown Source)
    at com.lowagie.text.Document.close(Unknown Source)

    j'ai ajouté le setPageEmpty comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (lecture != null) {
    				String ligne = "";
    				while ((ligne = lecture.readLine()) != null) {
    					System.out.println("Ligne ==>  "+ligne);
    					Paragraph p = new Paragraph(ligne);				
    					pdfDocument.add(p);
     
    				}
    			}else{
    				writer.setPageEmpty(false);
    			}

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    J'aurais plutôt fait ça :

    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
    boolean empty = true;
    if (lecture != null) {
      String ligne = "";
      while ((ligne = lecture.readLine()) != null) {
      	System.out.println("Ligne ==>  "+ligne);
      	empty = false;
      	Paragraph p = new Paragraph(ligne);				
      	pdfDocument.add(p);
      }
    }
     
    if ( empty ) {
    	// la page est vide, donc non existente pour IText : on la force à non vide
    	writer.setPageEmpty(false);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Les close() ne sont pas mal placés par rapport aux spécifications Java (Il y en a peut être des inutiles (celui sur du PDFWriter, puisque celui sur le Document devrait suffir). Maintenant, est-ce qu'il y a un "truc" spécial pour AIX, je n'en sais rien. Cela m'étonnerait quand même.
    Je ne pense pas toutefois que cela vienne des close() : l'exception est soulevé par l'API IText, au moment du close() certes, mais se fait par rapport à l'état actuel de la page.

    Personnellement, j'ai plusieurs code d'export de PDF que je fais tourner sur Windows et MacOSX, sans problème. Avec de légères différences par rapport au tiens. Essayes toujours pour voir.

    Déjà, je ne créé par un PDFDocument, mais un Document (com.lowagie.text.Document). Est-ce que ça change quelque chose, je ne sais pas. Sinon, il y a 3 petites autres différences par rapport à ton code :
    1. Je n'ouvre mon Document qu'au besoin : j'ouvre toujours mon PDFWriter, mais j'ouvre mon Document que si j'ai quelquechose à écrire, et s'il n'est pas déjà ouvert évidemment. A chaque nouvelle page, je fais newPage(), sauf pour la première page (puisque il y' a l'appel de open()).
    2. Je ne ferme mon Document que si je l'ai ouvert (et je ferme toujours mon OutputStream) ;
    3. Si je ne mets rien explicitement dans une page (donc après tout open() ou newPage()), je fais pdfwriter.setPageEmpty(false) ;


    Difficile de te mettre le code complet : il est un peu volumineux (un peu plus complexe que d'écrire juste du texte dans un PDF) et je n'ai pas le temps de le simplifier pour qu'il serve d'exemple clair et pertinent.
    J'ai suivi ces directives, et ça marche.. Merci

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

Discussions similaires

  1. The document has no pages
    Par Potaw dans le forum iReport
    Réponses: 8
    Dernier message: 21/06/2012, 15h09
  2. Erreur The document has no pages
    Par air75 dans le forum Documents
    Réponses: 1
    Dernier message: 18/03/2010, 12h52
  3. The document has no pages
    Par cyclopsnet dans le forum Jasper
    Réponses: 1
    Dernier message: 28/01/2010, 08h10
  4. Conversion XML vers PDF avec ITEXT
    Par adelpiero dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 29/07/2008, 10h16
  5. Réponses: 1
    Dernier message: 06/06/2008, 16h38

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