NoClassDefFoundError при использовании iText

#java #itext #noclassdeffounderror

Вопрос:

Я получаю этот NoClassDefFoundError, когда пытаюсь создать pdf-файл с помощью iText. Мой код (это тот же код, что и с сайта.):

         String input = "C:\input.jpg";
        String output = "output.pdf";
        PdfWriter pdfWriter;
        try {
            pdfWriter = new PdfWriter(output);
            PdfDocument pdfDoc = new PdfDocument(pdfWriter);
            Document doc = new Document(pdfDoc);
            ImageData data = ImageDataFactory.create(input);
            Image image = new Image(data);
            doc.add(image);
            doc.close();
        } catch (FileNotFoundException | MalformedURLException e1) {
            e1.printStackTrace();
        }
 

Код ошибки:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at com.itextpdf.kernel.pdf.PdfCatalog.<clinit>(PdfCatalog.java:73)
    at com.itextpdf.kernel.pdf.PdfDocument.open(PdfDocument.java:1963)
    at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:285)
    at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:266)
    at Test.f(Test.java:127)
    at Test.run(Test.java:34)
    at Main.main(Main.java:47)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 7 more
 

Комментарии:

1. Это типичная проблема, с которой я столкнулся. Если вы используете maven/gradle, убедитесь, что для любых зависимостей требуется только одна версия itext. Возможно, ваша ожидаемая версия была переопределена требованием транзитивной зависимости.

2. Вы используете maven? Если это так, попробуйте запустить: mvn зависимость:дерево и посмотрите на список, чтобы увидеть, включает ли он необходимые зависимости iText. Если нет, добавьте их в свой pom.xml.