これが状況です。既に PNG が生成されているプログラムに PDF 生成を追加する必要があります。最初に関係する 2 つのクラスは次
のとおりです。ActionUsuels
のコンストラクターCaptureImage3D
が呼び出される場所から。
PDF生成を追加したとき、CaptureImage3D
クラスにメソッドを追加しました。PDF 生成を追加する前は、PNG 生成は正しく機能していました。しかし、PNG 生成を実行しようとすると、: NoClassDefFoundError
:が表示されcom/lowagie/text/DocumentException
ます。
私はそれがクラスを意味することを知っています: DocumentException
(itext jarから)クラスパスから読み取ることはできませんが:
- PDF 生成メソッドは決して呼び出されません。
- のコンストラクタに入る前に例外が生成され
CaptureImage3D
ます。 - 次の PDF 生成方法を検討してください。
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();
}
}
すべての try/catch ブロックにコメントを付けると、すべて正常に動作します!!!
繰り返しますが、captureImagePDF は呼び出されません。また、のコンストラクターでさえCaptureImage3D
アクセスされることはありません。(そうあるべきですが、例外が前に発生します)。はい、クラスパスに itext があります。
どこでも呼び出されることのないコードの一部が例外の出現を引き起こすという事実は奇妙だと思います!
説明を求めることをためらわないでください!
何か案が?
ありがとうございました