0

这是这种情况。我需要将 PDF 生成添加到已经生成 PNG 的程序中。最初涉及的 2 个类是: ActionUsuels从哪里CaptureImage3D调用构造函数。

当我添加 PDF 生成时,我在CaptureImage3D课堂上添加了一个方法。在添加 PDF 生成之前,PNG 生成工作正常。但是现在当我尝试生成 PNG 时,我得到一个 : NoClassDefFoundError: com/lowagie/text/DocumentException

我知道这意味着类:(DocumentException来自itext jar)无法从类路径中读取,但是:

  1. PDF 生成方法永远不会被调用。
  2. 异常是在进入 的构造函数之前产生的CaptureImage3D
  3. 考虑以下 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。

我觉得很奇怪的是,一段从未在任何地方调用过的代码会导致异常的出现!

不要犹豫,要求澄清!

任何的想法?

谢谢

4

1 回答 1

3

您有一个 catch 的事实DocumentException意味着加载器必须加载该类,以便系统可以捕获它。:-)

如果您想避免在类路径中包含 iText jar,请抓住更高的东西,或者(如您所说)根本不抓住。:-P

于 2010-02-10T21:28:02.747 回答