2015-04-21 7 views
5

Chcę przeczytać tekst z pliku PDF znajdującego się na karcie SD. Jak możemy uzyskać tekst z pliku PDF zapisanego na karcie SD?Android- Pobierz tekst z pliku PDF

Próbowałem tak:

public class MainActivity extends ActionBarActivity implements TextToSpeech.OnInitListener { 

    private TextToSpeech tts; 
    private String line = null; 

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

     tts = new TextToSpeech(getApplicationContext(), this); 

     final TextView text1 = (TextView) findViewById(R.id.textView1); 

     findViewById(R.id.button1).setOnClickListener(new OnClickListener() { 

      private String[] arr; 

      @Override 
      public void onClick(View v) { 
       File sdcard = Environment.getExternalStorageDirectory(); 

       // Get the text file 

       File file = new File(sdcard, "test.pdf"); 

       // ob.pathh 
       // Read text from file 

       StringBuilder text = new StringBuilder(); 
       try { 
        BufferedReader br = new BufferedReader(new       FileReader(file)); 

        // int i=0; 
        List<String> lines = new ArrayList<String>(); 

        while ((line = br.readLine()) != null) { 
         lines.add(line); 
         // arr[i]=line; 
         // i++; 
         text.append(line); 
         text.append('\n'); 
        } 
        for (String string : lines) { 
         tts.speak(string, TextToSpeech.SUCCESS, null); 
        } 
        arr = lines.toArray(new String[lines.size()]); 
        System.out.println(arr.length); 
        text1.setText(text); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 

    } 

    @Override 
    public void onInit(int status) { 
     if (status == TextToSpeech.SUCCESS) { 
      int result = tts.setLanguage(Locale.US); 
      if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
       Log.e("TTS", "This Language is not supported"); 
      } else { 
       // speakOut(); 
      } 

     } else { 
      Log.e("TTS", "Initilization Failed!"); 
     } 
    } 

} 

Uwaga: To działa dobrze, jeśli plik jest plikiem tekstowym (test.txt), ale nie działa na pdf (test.pdf)

Ale tutaj tekst jest nie dostaje z pliku PDF, jest jak kod bajtowy. Jak mogę to osiągnąć?

Z góry dziękuję.

+2

Format pliku PDF nie jest zwykły tekst. Będziesz potrzebował biblioteki parserowej, takiej jak [PDFBox] (https://pdfbox.apache.org/), aby wyodrębnić teksty z pliku. – TactMayers

+0

Czy mogę użyć pola PDF na platformie Android? –

Odpowiedz

2

formacie PDF nie jest normalne plik tekstowy .. Trzeba zrobić trochę więcej badań na PDF to najlepsza odpowiedź dostaniesz How to read pdf in my android application?

+1

Wreszcie mogę wyświetlić ten plik PDF, ale jak mogę uzyskać tekst z tego pliku PDF? –

5

Mam roztwór z iText.

Gradle,

compile 'com.itextpdf:itextg:5.5.10' 

Java,

try { 
      String parsedText=""; 
      PdfReader reader = new PdfReader(yourPdfPath); 
      int n = reader.getNumberOfPages(); 
      for (int i = 0; i <n ; i++) { 
       parsedText = parsedText+PdfTextExtractor.getTextFromPage(reader, i+1).trim()+"\n"; //Extracting the content from the different pages 
      } 
      System.out.println(parsedText); 
      reader.close(); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
+0

jaki jest format ścieżki? Użyłem '/ storage/emulated/0/Download/abc.pdf' , ale to daje błąd –

+0

Jaki błąd otrzymujesz? Czy dodałeś pozwolenie na przechowywanie? – REMITH

+0

Tak, mam rozwiązanie, wystąpił błąd uprawnień –