2013-02-12 4 views
0

Я делаю приложение, которое требует, чтобы открыть pdf-файл в приложении для Android без использования стороннего приложения. Также я не хочу просматривать pdf-файл в webview. Для этого я использую PdfViewer.jar и сделал код, как показано ниже.чтение pdf в андроидном приложении

Java:

public class MainActivity extends ListActivity{ 

     public class First extends ListActivity { 

      String[] pdflist; 
      File[] imagelist; 
      @Override 
      public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       //setContentView(R.layout.main); 

       File images = Environment.getExternalStorageDirectory(); 
       imagelist = images.listFiles(new FilenameFilter() { 
        public boolean accept(File dir, String name) { 
         return ((name.endsWith(".pdf"))); 
        } 
       }); 
       pdflist = new String[imagelist.length]; 
       for (int i = 0; i < imagelist.length; i++) { 
        pdflist[i] = imagelist[i].getName(); 
       } 
       this.setListAdapter(new ArrayAdapter<String>(this, 
         android.R.layout.simple_list_item_1, pdflist)); 
      } 

      protected void onListItemClick(ListView l, View v, int position, long id) { 
       super.onListItemClick(l, v, position, id); 
       String path = imagelist[(int) id].getAbsolutePath(); 
       openPdfIntent(path); 
      } 

      private void openPdfIntent(String path) { 
       try { 
        final Intent intent = new Intent(First.this, Second.class); 
        intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, path); 
        startActivity(intent); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }} 

Second.java 



public class Second extends PdfViewerActivity 
{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
} 

public int getPreviousPageImageResource() { 
    return R.drawable.left_arrow; 
} 

public int getNextPageImageResource() { 
    return R.drawable.right_arrow; 
} 

public int getZoomInImageResource() { 
    return R.drawable.zoom_in; 
} 

public int getZoomOutImageResource() { 
    return R.drawable.zoom_out; 
} 

public int getPdfPasswordLayoutResource() { 
    return R.layout.pdf_file_password; 
} 

public int getPdfPageNumberResource() { 
    return R.layout.dialog_pagenumber; 
} 

public int getPdfPasswordEditField() { 
    return R.id.etPassword; 
} 

public int getPdfPasswordOkButton() { 
    return R.id.btOK; 
} 

public int getPdfPasswordExitButton() { 
    return R.id.btExit; 
} 

public int getPdfPageNumberEditField() { 
    return R.id.pagenum_edit; 
} 
} 

я добавил мой second.java в андроиде menifest too.But мой LogCat показывает следующее error.M не получает ошибку

LogCat:

02-12 09:23:50.408: E/ActivityThread(713): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]8b368 that was originally bound here 
02-12 09:23:50.408: E/ActivityThread(713): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969) 
02-12 09:23:50.408: E/ActivityThread(713): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863) 
02-12 09:23:50.408: E/ActivityThread(713): at android.app.ContextImpl.bindService(ContextImpl.java:1418) 
02-12 09:23:50.408: E/ActivityThread(713): at android.app.ContextImpl.bindService(ContextImpl.java:1407) 
02-12 09:23:50.408: E/ActivityThread(713): at android.content.ContextWrapper.bindService(ContextWrapper.java:473) 
02-12 09:23:50.408: E/ActivityThread(713): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157) 
02-12 09:23:50.408: E/ActivityThread(713): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145) 
02-12 09:23:50.408: E/ActivityThread(713): at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191) 
02-12 09:23:50.408: E/ActivityThread(713): at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850) 
02-12 09:23:50.408: E/ActivityThread(713): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551) 
02-12 09:23:50.408: E/ActivityThread(713): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549) 
02-12 09:23:50.408: E/ActivityThread(713): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
02-12 09:23:50.408: E/ActivityThread(713): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
02-12 09:23:50.408: E/ActivityThread(713): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
02-12 09:23:50.408: E/ActivityThread(713): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
02-12 09:23:50.408: E/ActivityThread(713): at java.lang.Thread.run(Thread.java:856) 
02-12 09:23:50.455: E/StrictMode(713): null 

Любой hepl ??

+0

Создайте собственную библиотеку для перезаписи PDF, если вы не хотите использовать сторонний вариант. –

+0

Я хочу использовать PdfViewer.jar для достижения этого. Я новичок в android, я не знаю, как я могу это использовать. – sonia

+0

@sonia, прочтите документацию для PdfViewer.jar, затем попробуйте использовать ее. Ваш вопрос слишком широк для правильного ответа, поэтому сначала попробуйте решить его самостоятельно, а затем вернитесь с любыми конкретными проблемами, с которыми вы сталкиваетесь. – Egor

ответ

0

Используйте соответствующую библиотеку в приложении, использующую логику PDF. При использовании библиотеки внутри вашего собственного приложения не запускается другое приложение для просмотра/изменения pdf.

Посмотрите на https://stackoverflow.com/questions/4665957/pdf-parsing-library-for-android для краткого изложения имеющихся библиотек PDF.

-2
Use following code. But PDF viewer application must present on device. 

File pdfFile = new File(Environment.getExternalStorageDirectory()+ "/video/"+filePath); 
      if(pdfFile.exists()) 
      { 
       Uri path = Uri.fromFile(pdfFile); 
       Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
       pdfIntent.setDataAndType(path, "application/pdf"); 
       pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

       try 
       { 
        startActivity(pdfIntent); 
       } 
       catch(ActivityNotFoundException e) 
       { 
        Toast.makeText(this, "No Application available to view pdf", Toast.LENGTH_LONG).show(); 
       } 
+0

OP специально сказал, что он не хочет использовать стороннее приложение. –

+0

Что такое "filepath"? – sonia

+0

filepath - это pdf fileName или путь. в моем примере/sdcard/video/'filepath' является просто образцом. – ManishL

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