PDFBox: Nach RegEx ganze Zeile

ChrisMS

Mitglied
Hallo,

Ich lese mit PDFBox eine PDF Datei mit folgendem Pattern aus
Pattern.compile("\s(([0-9]{5})[A-Z]?)\s");

In der PDF sthen mehrere Daten drin, aber auch Tabellen mit folgenden Beispielwerten
01100 1751 13 2.548,0 100,00 2.548,0 0,74 0,96 950 -22,92 1,9
01101 1751 7 2.191,0 100,00 2.191,0 0,40 0,32 376 25,00 1,0
01102 1751 8 808,0 100,00 808,0 0,46 2,94 343 -84,35 3,0

Er findet also z.B. 01100 doch dann hätte ich gerne die gesamte Zeile.
Wie komme ich von dem Pattern-Match auf die gesamte Zeile?


Java:
public class PDFPatternSearch {

    public static void main(String[] args) {

        PDDocument pd;
        try {
            // PDF file  extracted
            File input = new File("C:\\filename.pdf");

            StringBuilder sb = new StringBuilder();
            pd = PDDocument.load(input);
            PDFTextStripper stripper = new PDFTextStripper();

            sb.append(stripper.getText(pd));

            Pattern p = Pattern.compile("\\s(([0-9]{5})[A-Z]?)\\s");

            Matcher m = p.matcher(sb);

            while (m.find()) {
               
                System.out.print(m.group());
            }

            if (pd != null) {
                pd.close();
            }
        } catch (Exception e) {
            System.out.println("Error in PDFPatternSearch");
            e.printStackTrace();
        }
    }

}

Danke und Gruss
Chris
 
Moin,
Wie komme ich von dem Pattern-Match auf die gesamte Zeile?
Was genau meinst Du? 😕

Dein Pattern matcht also genau das was soll, wenn ich dich richtig verstehe (in Deinem Beispiel die 01100) ... Du durchsuchst aber doch den gesamten Text!
Warum liest Du nicht einfach Zeilenweise ein und setzt Dein Pattern dann auf jede einzelne Zeile an?
Oder verstehe ich jetzt jetzt was völlig falsch ?

Gruß Klaus
 
Hi,
du hast es scheinbar richtig verstanden 🙂
Ich habe mich nur in den Ansatz "Dursuche das ganze Dokument und komm vom Treffer zur ganzen Zeile" verbissen.
Das Zeilenweise auslesen sollte mit der PDFBox Libary aber auch möglich sein. Darauf das Pattern zu legen macht irgendwie Sinn ;-) Das war der Denkanstoß den ich brauchte. Danke.
lg
Chris
 
Da nich' für 🙂

Leider kenne ich die LIB nicht und kann Dir da nix zu sagen, aber es sollte doch eine API geben, oder ??

Gruß Klaus
 
Der Ansatz hat aber so gepaßt. Danke.
Ich teile das Ergebnis des PDFBox-Readers in ein Array,
durchlaufe es und prüfe jede Zeile ob es mit dem Pattern matcht.

Danke für den Denkanstoß.

Code:
....        
Pattern p = Pattern.compile("(([0-9]{5})[A-Z]?)\\s");
        
            PDDocument document;       
            try {
              document = PDDocument.load(filePDF);

             //Instantiate PDFTextStripper class
              PDFTextStripper pdfStripper = new PDFTextStripper();

              //Retrieving text from PDF document
              String text = pdfStripper.getText(document);

              // Every line saved in a row of array
              String[] textLines = text.split("\n");

              for (String s : textLines) {
                   
                    // Matcher refers to the actual text where the pattern will be found
                    Matcher m = p.matcher(s);
   
                    //check if pattern matches and pattern is at first position
                    while (m.find() && m.start()==0) {
                        // group() method refers to the next number that follows the
                        // pattern we have specified.
                        System.out.print(m.group());
                   }
...
 

Neue Themen


Zurück
Oben