Domanda

Sono nuovo in PDFbox e voglio estrarre un paragrafo che corrisponde ad alcune parole particolari e sono in grado di estrarre l'intero PDF al testo (Blocco note) ma non ho idea di come estrarre particolare paragrafo al mio programma Java.Qualcuno può aiutarmi con questo atleast alcuni tutorial o esempi. Grazie mille

È stato utile?

Soluzione

Il testo nei documenti PDF è assolutamente posizionato. Quindi, invece di parole , linee e paragrafi , è solo posizionato assolutamente caratteri .

Diciamo di avere un paragrafo:

.

Neque Porro Quisquam est qui dolorem ipsum quia dolor sit amet, consectotur, adipisci velit

Principalmente parlando, nel file PDF sarà rappresentato come caratteri N ad una posizione, e un po 'a destra, q, u, e più a destra, ecc.

PDFBOX tenta di Indovina Come i caratteri effettuano parole, linee e paragrafi. Quindi cercherà molti personaggi a circa la stessa posizione verticale, per gruppi di personaggi che sono vicini l'uno all'altro e simili a provare e trovare ciò di cui hai bisogno. Fa quello estraendo il testo da tutta la pagina e quindi elaborando il carattere con carattere per creare testo (può anche provare ed estrarre testo da una sola area rettangolare all'interno di una pagina). Vedere la classe appropriata Pdftextstripper (o Pdftextstripperbyrea ). Per l'utilizzo, vedere ExtractText.java in Fonti PDFbox.

significa che non è possibile estrarre facilmente paragrafi utilizzando PDFbox. Significa anche che PDFbox può e talvolta manca quando estrarre il testo (ci sono molti documenti PDF molto diversi là fuori).

Cosa Can DO è estrarre il testo dall'intera pagina e quindi provare a trovare il paragrafo che cerca attraverso quel testo. Espressioni regolari di solito sono adatte per tali compiti (disponibili in Java tramite pattern e Bicker classi o metodi di convenienza su stringa class).

Altri suggerimenti

public static void main(String[] args) throws InvalidPasswordException, IOException {
    File file = new File("File Path");
    PDDocument document = PDDocument.load(file);        
    PDFTextStripper pdfStripper = new PDFTextStripper();
    pdfStripper.setParagraphStart("/t");
    pdfStripper.setSortByPosition(true);


    for (String line: pdfStripper.getText(document).split(pdfStripper.getParagraphStart()))
            {
                System.out.println(line);
                System.out.println("********************************************************************");
            }
}
.

Guys si prega di provare il codice sopra.Questo funziona sicuramente con PDFOX-2.0.8 JAR

Avevo rilevato l'inizio del paragrafo utilizzando l'utilizzo del seguente approccio.Leggi la riga della pagina per linea.Per ogni riga: -

    .
  1. Trova l'ultimo indice di '.'(periodo) in linea.
  2. Confronta questo indice con la lunghezza della linea di input.
  3. Se l'indice è inferiore a questo implica che questa non è la fine del paragrafo precedente.
  4. Se è quindi indica che il paragrafo precedente è terminato e la linea successiva sarà l'inizio del nuovo paragrafo.

    Spero che questo aiuti.

Dopo l'estrazione del testo, il paragrafo può essere costruito a livello di programmazione considerando i seguenti punti:

    .
  1. Tutte le linee iniziano con lettere piccole dovrebbero essere unite con la linea precedente.Ma una linea inizia con la lettera maiuscola può anche richiedere di unirsi alla linea precedente.E.G: per espressione quotata.

  2. .,?,!, "La linea finale con questi personaggi potrebbe essere la fine del paragrafo. Non sempre.

  3. Se è determinato a livello di programmazione un paragrafo, quindi testarlo per il numero pari di virgolette.Questa potrebbe essere semplice preventivo doppio o preventivo di apertura e chiusura Unicode doppia e chiusura.

Try this:

private static String getParagraphs(String filePath, int linecount) throws IOException {
    ParagraphDetector paragraphDetector = new ParagraphDetector();
    StringBuilder extracted = new StringBuilder();
    LineIterator it = IOUtils.lineIterator(new BufferedReader(new FileReader(filePath)));
    int i = 0;
    String line;
        for (int lineNumber = 0; it.hasNext(); lineNumber++) {
            line = (String) it.next();
            if (lineNumber == linecount) {
                for (int j = 0; it.hasNext(); j++) {
                    extracted.append((String) it.next());
                }
            }
        }
        return paragraphDetector.SentenceSplitter(extracted.toString());
    }
.

È possibile prima utilizzare la funzione PDFBOX GetText per ottenere il testo.Ogni linea termina con '\ n';Quindi non puoi segmentare i paragrafi simpy con "\ n".Se una linea satifica la seguente condizione:

line.length() > 2 && (int)line.charAt(line.length()-2) == 32

Allora questa linea è l'ultima riga del suo paragrafo.Qui 32 è un valore unicode.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top