java PdfTextExtractor.getTextFromPage (неизвестный источник) - PullRequest
0 голосов
/ 19 ноября 2009

Здравствуйте, у меня проблемы с анализом PDF, когда итератор достигает страницы 11, исключение - throw

Есть идеи? Спасибо

Вот мой код:

import java.io.*;
import java.nio.charset.Charset;
import java.util.regex.*;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.hyphenation.TernaryTree.Iterator;
import com.lowagie.text.pdf.parser.PdfTextExtractor;

public class PdfParser {
    /** 
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int index = 0;
        try {
            PdfReader readerN = new PdfReader("C:\\Documents and Settings\\stefan.stere\\hibernateWorkspace\\PdfParser\\src\\monitor3.pdf");
            OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(new File("C:\\Documents and Settings\\stefan.stere\\hibernateWorkspace\\PdfParser\\src\\pdf2txt.rtf")),"Cp1252");

            PdfTextExtractor parse = new PdfTextExtractor(readerN);
            int nrPages = readerN.getNumberOfPages();

            for (int i=1; i<nrPages ; i++) {
                index++;
                String page = parse.getTextFromPage(i);
                if(page != null){
                    page = page.replace(new StringBuffer("null"), new StringBuffer("??"));
                    page = page.replaceAll("Comercial.", "Comerciala");
                    page = page.replaceAll("ACT ADI..IONAL", "ACT ADITIONAL");
                    page = page.replaceAll("HOT.R..E", "HOTARARE");
                    page = page.replaceAll("HOT.R..EA", "HOTARAREA");
                    page = page.replaceAll("HOT.R..I", "HOTARARI");
                    page = page.replaceAll("..cheiat.", "incheiata");
                    page = page.replaceAll("ANUN..", "ANUNT");
                    out.write(page);
                    System.out.println(page);
                }
            }
            out.close();
            readerN.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            System.out.println(index);
        }
    }
}

и стек исключений:

java.lang.ArrayIndexOutOfBoundsException: Invalid index: 62
at com.lowagie.text.pdf.CMapAwareDocumentFont.decodeSingleCID(Unknown Source)
at com.lowagie.text.pdf.CMapAwareDocumentFont.decode(Unknown Source)
at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.decode(Unknown Source)
at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.displayPdfString(Unknown Source)
at com.lowagie.text.pdf.parser.PdfContentStreamProcessor$ShowTextArray.invoke(Unknown Source)
at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.invokeOperator(Unknown Source)
at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.processContent(Unknown Source)
at com.lowagie.text.pdf.parser.PdfTextExtractor.getTextFromPage(Unknown Source)
at PdfParser.main(PdfParser.java:32)

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Как информация, теперь iText 5.0.6 отлично работает с большим количеством версий PDF, я тестировал PDF, созданный многими различными программами, и у 2.1.7 были проблемы со многими.

Получить последнюю версию из iText download

1 голос
/ 19 ноября 2009

Нет ответа, но, похоже, у многих людей такая же проблема, есть еще один связанный вопрос о SO. И если вы выполняете поиск с помощью ArrayIndexOutOfBoundsException и getTextFromPage в Google, вы видите ту же проблему, но не решаете ...

Кстати, ваш цикл остановится перед обработкой последней страницы, поскольку первая страница имеет индекс 1 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...