Bonjour,

J'essaie de génèrer des pdf à partir d'une application java. J'utilise iText. Pour la page de garde, je voudrais superposer une image et le nom de mon rapport.

J'ai donc insérer l'image de manière classique avec un truc du type Document.add(monImage).
Pour coller le texte dessus, j'appelle le contentByte de mon writer et je fais dessus des showTextAligned (entre beginText et endText).

Des fois ça marche, et des fois j'ai un message d'erreur quand j'ouvre le pdf (invalid restore). J'ai lu quelque part que c'est parce que je restorais un état que je n'avais pas sauvé. J'ai donc essayé de faire un saveState sur mon contentByte (je suis pas contrariante), mais ça n'y change rien (nb: je fais aucun restoreState de toute façon).

Est-ce que quelqu'un sait pourquoi j'ai cette erreur à l'ouverture du pdf ?
Y a-t-il un moyen plus simple que les contentByte pour mettre une image en fond sur une page donnée ?

Ci-dessous le code (à la suite de ça, je fais juste des add de paragraph et je close bien mon writer et mon document).

Merci d'avance,
Marie.

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
document = new Document();
 
//création du fichier pdf 
file = new File("./monRapport.pdf");
 
try {
	writer = PdfWriter.getInstance(document, new FileOutputStream(file));		
	document.open();
 
	cb = writer.getDirectContent();
	cb.saveState();
 
	cb.createGraphics(PageSize.A4.width(), PageSize.A4.height());
 
	//on ajoute l image centrée.    
	Image logo = Image.getInstance("./logo.JPG");
	logo.setAlignment(Element.ALIGN_CENTER);
        document.add(logo);
 
 
	cb.beginText();
 
        BaseFont bf = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.setFontAndSize(bf, 32);
	cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "MY REPORT", 300, 450, 0);
 
	cb.endText();		
 
} 
	catch (DocumentException de) {
		System.err.println(de.getMessage());
} 
	catch (IOException ioe) {
		System.err.println(ioe.getMessage());
}