0

これは私の最初のクエストであり、問​​題の解決策が見つかりませんでした。私のテキストが壊れた英語であっても、誤解しないでください。

私のプログラムでは、既存の PDF ドキュメント内の画像のサイズを変更したいと考えています。これは、Java プログラム内で自動的に行われます。検索中に、Web で Ghost4j ライブラリを見つけました。これで問題を解決できるかもしれません。

Ghost4j が機能するかどうかを試すための最初のテストとして、MySQL データベースから PDF ドキュメントをロードし、pageCount を確認します。

これが私の短いコードです:

... 
for (File file : convertableFiles) {
        InputStream inputStream = new ByteArrayInputStream(file.getFile());

        PDFDocument doc = new PDFDocument();
        doc.load(inputStream);
        System.out.println(doc.getPageCount());
}
...

エラーは 45 行目 = doc.load(inputStream) にあります。

(注: doc.load に new File(Path) を使用し、pdfSample ドキュメントを設定すると動作しますが、inputStream では動作しません)

プログラムを実行すると、毎回この Excption が表示されます。

Sep 29, 2014 4:54:53 PM ch.carauktion.dbresize.DBFileResizer convert
INFORMATION: P1 (asc): 0 / 1
Sep 29, 2014 4:54:54 PM ch.carauktion.dbresize.DBFileResizer run
SCHWERWIEGEND: P1 (asc): Exception
java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString
    at com.lowagie.text.pdf.PdfEncryption.<init>(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.readDecryptedDocObj(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.readDocObj(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.readPdf(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
    at org.ghost4j.document.PDFDocument.load(PDFDocument.java:45)
    at ch.carauktion.dbresize.pdf.DBPdfResizer.convertFiles(DBPdfResizer.java:50)
    at ch.carauktion.dbresize.DBFileResizer.convert(DBFileResizer.java:114)
    at ch.carauktion.dbresize.DBFileResizer.run(DBFileResizer.java:59)
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.ASN1OctetString
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 10 more

このプロジェクトでは、すべてダウンロードした Ghost4j パッケージに含まれるライブラリを実装します。

  • Ghost4j-0.5.1
  • iText-2.1.7
  • jna-3.3.0
  • log4j-1.2.15
  • commons-logging-1.1.1
  • commons-io-1.3.1
  • commons-beanutils-1.8.3

このエラーを検索したサイトの例:

http://sourceforge.net/p/itext/mailman/itext-questions/thread/4F422974.1070002@redlab.be/

http://itext-general.2136553.n4.nabble.com/java-lang-NoClassDefFoundError-org-bouncycastle-asn1-ASN1OctetString-td3427288.html

iText 2.1.7 はサポートされなくなり、バージョン 5.xx を使用する必要があることを理解していますが、Ghost4j Jar で Lib 2.1.7 が使用されているように見える場合、ここでは最新の iText Lib をダウンロードできません。それ以外の場合は、私のせいかもしれません。現時点では、最新バージョンを正しく実装する方法がわかりませんでした。

PS: Java 1.7、Eclipse Kepler、Windows 8.1 を使用しています。

誰かが解決策を知っているか、少し助けてくれるとうれしいです。

ウドマーン

4

1 に答える 1

2

Bouncycastle の依存関係がありません。

PDF を保護する必要がある場合を除いて、PDF ライブラリがそれに依存するとは思いませんが、ここで Bouncycastle を見つけることができます: http://bouncycastle.org/latest_releases.html

Maven Central リポジトリで試すbcprov-jdk14-147.jarか、 Maven Central リポジトリbcprov-ext-jdk14-147.jarからダウンロードできます。

それでもうまくいかない場合は、ここにリストされている他の除外された依存関係を試してください。

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
    <exclusions>
        <exclusion>
            <artifactId>bcmail-jdk14</artifactId>
            <groupId>bouncycastle</groupId>
        </exclusion>
        <exclusion>
            <artifactId>bcmail-jdk14</artifactId>
            <groupId>org.bouncycastle</groupId>
        </exclusion>
        <exclusion>
            <artifactId>bcprov-jdk14</artifactId>
            <groupId>bouncycastle</groupId>
        </exclusion>
        <exclusion>
            <artifactId>bcprov-jdk14</artifactId>
            <groupId>org.bouncycastle</groupId>
        </exclusion>
        <exclusion>
            <artifactId>bctsp-jdk14</artifactId>
            <groupId>org.bouncycastle</groupId>
        </exclusion>
    </exclusions>
</dependency>

注: これらの依存関係を取得するには、Maven を使用する必要があります。

于 2014-09-29T16:28:52.940 に答える