这是这种情况。我需要将 PDF 生成添加到已经生成 PNG 的程序中。最初涉及的 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。
我觉得很奇怪的是,一段从未在任何地方调用过的代码会导致异常的出现!
不要犹豫,要求澄清!
任何的想法?
谢谢