*Markus: PDF auslesen?

Hallo,

Durch PDFBox fand ich eine Bibliothek, mit der man wahrscheinlich sehr gut Pdf-Dateien bearbeiten kann. Dummerweise gibt es weder hier, noch fand ich woanders eine Art Anleitung, wie man dies am besten bewerkstelligen kann. Genau genommen scheitert es ja schon am Auslesen eines Pdfs. Ich dem Forum auf der dortigen Seite will ich auch nicht unbedingt fragen, da der letzte Beitrag vor einem Monat war, also frage ich mal in die Runde, ob sich jemand mit dieser Bibliothek schon beschäftigt hat und etwas mehr darüber weiß als ich. Ich will nur wissen, wie man ein Pdf richtig einlesen kann, denn das kann ja nicht so schwer sein. Durch die zu dieser Bibliothek ergänzenden Javadoc habe ich mal folgenden Code zusammengereimt:

  
import java.io.BufferedWriter;  
import java.io.File;  
import java.io.IOException;  
import java.io.OutputStreamWriter;  
import java.io.Writer;  
  
import org.pdfbox.pdmodel.PDDocument;  
import org.pdfbox.util.PDFTextStripper;  
  
public class PDFLeser  {  
  
 private File file;  
 private PDDocument doc;  
  
 public PDFLeser(String arg) throws IOException   {  
  file = new File(arg);  
  doc = new PDDocument();  
 }  
  
 public void einlesen() throws IOException    {  
  doc = PDDocument.load(file);  
  doc.close();  
 }  
  
 public void ausgeben() throws IOException   {  
  Writer out = new BufferedWriter(new OutputStreamWriter(System.out));  
  PDFTextStripper stripper = new PDFTextStripper();  
  stripper.writeText(doc, out);  
  
 }  
  
 public static void main(String[] args) throws IOException  {  
  PDFLeser pdfleser = new PDFLeser("rechnung.pdf");  
  pdfleser.einlesen();  
  pdfleser.ausgeben();  
 }  
}  

Das Problem hierbei ist, dass das Kompilieren folgenden Fehler verursacht:

Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
 at org.pdfbox.pdmodel.PDDocument.openProtection(PDDocument.java:905)
 at org.pdfbox.pdmodel.PDDocument.decrypt(PDDocument.java:489)
 at org.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:204)
 at PDFLeser.ausgeben(PDFLeser.java:28)
 at PDFLeser.main(PDFLeser.java:35)

Ich denke mir, dass es doch nicht sein kann, dass eine weitere externe (Verschlüsselungs-)Bibliothek, Bouncycastle, die ich nicht installiert habe, Voraussetzung ist, nur um ein simples Pdf auszulesen?

Markus

--
http://www.apostrophitis.at
六 7東曲 人港ラ
  1. moin *Markus :)

    Zu deinem Problem mit PdfBox kann ich leider auch nichts sagen.
    Aber ich kann dir eine andere Bibliothek ans Herz legen.
    Ich arbeite damit schon länger und falls damit Fragen auftauchen kann entweder ich dir eventuell helfen oder die relativ große und aktive community.

    liebe Grüße aus Berlin
    lina-

    --
    Dinge aus dem linaland
    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    1. Hallo,

      danke für den Tipp. Ich konnte aber nun das Problem lösen. Was mich etwas nervt, ist, dass ich zuerst mal zwei verschiedene Bouncycastle-Bibliotheken (Provider und SMIME/CMS), sowie die Fontbox-Bibliothek herunterladen und verlinken musste, damit das Programm endlich Pdfs auslesen kann, welches nun so aussieht:

        
      import java.io.File;  
      import java.io.IOException;  
      import org.pdfbox.pdmodel.PDDocument;  
      import org.pdfbox.util.PDFTextStripper;  
        
      public class PDFLeser  {  
        
       private File file;  
       @SuppressWarnings("unused")  
       private PDDocument doc;  
        
       public PDFLeser(String arg) throws IOException   {  
        file = new File(arg);  
        doc = new PDDocument();  
       }  
        
       public String ausgeben() throws IOException  {  
        PDDocument doc = PDDocument.load(file);  
        PDFTextStripper stripper = new PDFTextStripper();  
        return stripper.getText(doc);  
       }  
        
       public static void main(String[] args) throws IOException  {  
        PDFLeser pdfleser = new PDFLeser("rechnung.pdf");  
        System.out.println(pdfleser.ausgeben());  
       }  
      }  
        
      
      

      Eines frage ich mich schon. Wie könnte man am besten vorgehen, dass sich ein User, der so ein Programm verwenden will, nicht erst mehrere Java-Bibliotheken herunterladen muss?
      Vielleicht die einzelnen Bibliotheksklassen irgendwie mitliefern, falls man das überhaupt darf?

      Markus

      --
      http://www.apostrophitis.at
      六 7東曲 人港ラ