iText и org.bouncycastle.asn1.ASN1Primitive не найдены

Я новичок в iText. Это мой первый проект с использованием этой библиотеки.

Я создаю PDF-файл с большой таблицей, и во время компиляции я получаю эту ошибку Class Not Found: файл класса для org.bouncycastle.asn1.ASN1Primitive not found

Я запутался, так как я использую только основные функции и даже не касался функций подписи PDF. Что мне делать, чтобы исправить ошибку?

Я использую:

  • JDK 1.7
  • iТекст 5.3.5
  • extrajars 2.2 (который предоставляет файлы bcmail-jdk15-146.jar, bcprov-jdk15-146.jar и bctsp-jdk15-146.jar)

Я использую iText только внутри одного класса с этим импортом:

import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

Если это поможет, я хотел бы уточнить, что когда я запускаю проект в NetBeans, он компилируется и работает нормально. Ошибка появляется, когда я пытаюсь скомпилировать его в один исполняемый файл jar (который включает в себя dist/lib)

Это цель build.xml, где появляется ошибка:

<target name="single_jar" depends="jar">

    <property name="store.jar.name" value="Final"/>

    <property name="store.dir" value="store"/>
    <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

    <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>

    <delete dir="${store.dir}"/>
    <mkdir dir="${store.dir}"/>

    <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
        <zipgroupfileset dir="dist" includes="*.jar"/>
        <zipgroupfileset dir="dist/lib" includes="*.jar"/>

        <manifest>
            <attribute name="Main-Class" value="${main.class}"/>
        </manifest>
    </jar>

    <zip destfile="${store.jar}">
        <zipfileset src="${store.dir}/temp_final.jar"
        excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
    </zip>

    <delete file="${store.dir}/temp_final.jar"/>

</target>

person phrfpeixoto    schedule 26.12.2012    source источник
comment
Текущие версии iText (например, 5.3.5) используют BouncyCastle 1.47, но вы предоставляете 1.46. Пожалуйста, обновите зависимости.   -  person mkl    schedule 26.12.2012
comment
Я использовал банки из последнего пакета extrajars в проекте iText. Я попробую 1.47 и отпишусь о результатах.   -  person phrfpeixoto    schedule 26.12.2012
comment
Привет, все заработало, как ты сказал. Большое спасибо. Пожалуйста, опубликуйте ответ, чтобы я мог отметить его как правильный.   -  person phrfpeixoto    schedule 26.12.2012


Ответы (2)


Текущие версии iText (начиная с 5.3.0) используют BouncyCastle 1.47, но вы предоставляете 1.46; хотя это выглядит как небольшой шаг, между этими версиями BC есть существенные различия; любое разумное управление версиями назвало бы его 2.0.

Пожалуйста, обновите зависимости.

person mkl    schedule 26.12.2012
comment
Я хотел бы отметить (для других с той же проблемой), что пакет extrajars-2.2, предоставляемый iText 5.3.5, включает версию BC 1.46, которая не будет работать. - person phrfpeixoto; 27.12.2012
comment
В качестве примечания о зависимостях... iText был улучшен. Если вам нужна информация о зависимостях, просто просмотрите файл pom.xml. Если ваш проект также использует maven, автоматически используются правильные зависимости. - person mkl; 28.12.2012
comment
Кстати, в настоящее время (т.е. с iText 5.4.1) используется BC 1.48. Таким образом, всегда проверяйте версию BC, требуемую вашей версией iText. - person mkl; 03.04.2013

Я получал java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Primitive, когда зависел от:

    <dependency>                    
        <groupId>com.itextpdf.tool</groupId>
        <artifactId>xmlworker</artifactId>
        <version>5.5.0</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.0</version>
    </dependency>

Мне нужно было явно включить новые артефакты bouncycastle:

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.50</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.50</version>
    </dependency>        
    <dependency>                    
        <groupId>com.itextpdf.tool</groupId>
        <artifactId>xmlworker</artifactId>
        <version>5.5.0</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.0</version>
    </dependency>
person MrDrews    schedule 07.05.2014