C'est la situation. Je dois ajouter la génération de pdf à un programme qui a déjà la génération de PNG. Initialement les 2 classes impliquées sont: ActionUsuels
D'où le constructeur de CaptureImage3D
est appelé. Lorsque j'ai ajouté la génération de PDF j'ai ajouté une méthode à la classe CaptureImage3D
JAVA - Bizarre NoClassDefFoundError dans: com/lowagie/textDocumentException
Avant d'ajouter la génération PDF, la génération PNG a fonctionné correctement. Mais maintenant, quand j'essaie de faire la génération PNG, je reçois un: NoClassDefFoundError
: com/lowagie/text/DocumentException
.
Je sais que cela signifie que la classe: DocumentException
(du pot itext) ne peut pas être lu à partir du classpath mais:
- La méthode de génération de PDF est jamais appelé. L'exception est générée avant d'entrer dans le constructeur
CaptureImage3D
. - Tenir compte de la méthode de génération de PDF suivant:
Code:
public void captureImagePDF(File imageFile)
{
System.out.println("Pdf appelé");
// Dimension (en pixels) de l'image a sauvegarder dans le fichier
Dimension dim = new Dimension(512, 512);
// On recupere l'image (pixmap) rendue par le canvas 3D offscreen
BufferedImage myBufferedImage = offScreenCanvas.getOffScreenImage(dim);
// On recupere le contexte graphique de l'image finale de sortie
Graphics2D gc = myBufferedImage.createGraphics();
gc.drawImage(myBufferedImage, 0, 0, null);
Document myPDF = new Document(PageSize.A4, 50, 50, 50, 50);
PdfWriter myWriter = null;
try
{
myWriter = PdfWriter.getInstance(myPDF, new FileOutputStream(imageFile));
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (DocumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
myPDF.open();
PdfContentByte cb = myWriter.getDirectContent();
cb.saveState();
Image image = null;
try {
image = Image.getInstance(myBufferedImage,null);
}
catch (BadElementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
cb.addImage(image);
}
catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Quand je commente tous les blocs try/catch, tout fonctionne très bien !!!
Je répète encore: captureImagePDF n'est jamais appelé. Et même le constructeur de CaptureImage3D
n'est jamais accédé. (il devrait être, mais l'exception est soulevée avant). Et oui, j'ai itext dans le classpath. Je trouve bizarre le fait qu'un morceau de code, qui n'est jamais appelé nulle part, provoque l'apparition de l'exception!
N'hésitez pas à demander des éclaircissements!
Une idée?
Merci
Pourquoi ne pas mettre la classe manquante sur le classpath? – ron