2013-11-23 2 views
1

Когда я попытался прочитать pdf-файл с SD-карты и извлечь текст из него, ничего не произошло. Ошибок, предупреждений, уведомлений и файлов результатов не было. Я сохранил как исходный файл, так и результат в корневой папке SD-карты устройства. Не могли бы вы, ребята, помочь мне решить эту проблему? Вот мой код:Извлечь текст из pdf-файла на Android с помощью iTextG

package com.example.androidtest; 

import java.io.File; 
... 

public class MainActivity extends Activity { 

private Button button; 

    public static final String TIMETABLE = "doc.pdf";      // The original PDF that will be parsed. 
public static final String RESULT = "timetable.txt";     // The text file received after scan. 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    processSource(); 


} 

public void processSource() { 

    button = (Button) this.findViewById(R.id.button_add); 
    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
       try { 
       new MainActivity().extractText(TIMETABLE, RESULT); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
    }); 


} 

public void extractText(String pdf, String doc) throws IOException { 

    File sdcard = Environment.getExternalStorageDirectory();     // Load file timetable.txt from device's sdcard 
    File file = new File(sdcard, pdf); 

    File text = new File(sdcard, doc);          // Save the result file in device's sdcard 
    InputStream is; 
    try { 
     is = new FileInputStream(file); 
     PdfReader reader = new PdfReader(is);            // Call the source file 
     PrintWriter out = new PrintWriter(new FileOutputStream(text)); 
     Rectangle rect = new Rectangle(0, 0, 600, 900);     // Define the rectangle to extract text within it 
       RenderFilter filter = new RegionTextRenderFilter(rect); 
       TextExtractionStrategy strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter); 
       out.println(PdfTextExtractor.getTextFromPage(reader, 1, strategy));  

       out.flush(); 

     out.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }            // Call the source file 

}  

}

И вот что он показал на вкладке консоли, когда я тестировал на AVD (я надеюсь, что это может помочь):

[2013 -11-23 03:03:29 - AndroidTest] Android Launch! [2013-11-23 03:03:29 - AndroidTest] adb работает нормально. [2013-11-23 03:03:29 - AndroidTest] Выполнение com.example.androidtest.MainActivity> запуск активности [2013-11-23 03:03:29 - AndroidTest] Автоматический целевой режим: запуск нового эмулятора с> совместимый AVD 'Tab' [2013-11-23 03:03:29 - AndroidTest] Запуск нового эмулятора с вкладкой виртуального устройства [2013-11-23 03:03:29 - AndroidTest] Новый эмулятор найден: эмулятор -5554 [2013-11-23 03:03:29 - AndroidTest] Ожидание выхода HOME ('android.process.acore') будет запущено ... [2013-11-23 03:03:57 - AndroidTest ] HOME находится на устройстве 'emulator-5554' [2013-11-23 03:03:57 - AndroidTest] Загрузка AndroidTest.apk на эмулятор устройства-5554 ' [2013-11-23 03:04:06 - AndroidTest] Установка AndroidTest.apk ... [2013-11-23 03:04: 29 - AndroidTest] Успех! [2013-11-23 03:04:29 - AndroidTest] Начальная деятельность> com.example.androidtest.MainActivity на эмуляторе устройства -5554 [2013-11-23 03:04:30 - AndroidTest] ActivityManager: Начало: Intent > {действие = android.intent.action.MAIN кот = [android.intent.category.LAUNCHER]> = CMP com.example.androidtest/.MainActivity}

Спасибо за ваше время!

ответ

0

Вы используете фильтр, чтобы ограничить область для извлечения текста из:

Rectangle rect = new Rectangle(0, 0, 600, 900); 
// Define the rectangle to extract text within it 
RenderFilter filter = new RegionTextRenderFilter(rect); 

PDF-страницы не нужно иметь свой левый нижний угол на (0, 0). Он может быть где угодно в системе координат. Таким образом, страница формата А4 может быть (0, 0, 595, 842), но она также может быть (1000, 2000, 1595, 2842).

Возможно, в PDF-файле, который вы пытаетесь извлечь текст, есть страницы, которые находятся за пределами прямоугольника (0, 0, 600, 900), который вы используете для фильтра. Это означает, что фильтр не пересекается со страницей, и поэтому текст не извлекается.

Смежные вопросы