2012-04-24 5 views
48

Я делаю заявку, которая требует, чтобы открыть pdf.Как читать pdf в приложении для Android?

У меня также есть папка с файлами в pdf, поэтому я не могу открыть ее непосредственно в веб-просмотре.

По умолчанию Android не поддерживает формат pdf.

Есть ли API, который работает на android (кроме MuPdf) ??

Мое устройство не имеет никакого Reader PDF установлен так ACTION VIEW не полезно для меня

После не работает .......

Render a PDF file using Java on Android

Open asset file pdf in application

вы можете предложить мне любой хороший api ...

благодарит заранее ...

+0

[Просто попробуйте это] (http://code.google.com/p/apv/) – Praveenkumar

+0

спасибо я уже пробовал это ... не работает для меня – MAC

+0

@ZazGmy: страница не найдена. .. – MAC

ответ

60

Я просто сделал это, используя PdfViewer.jar (загрузите его с помощью синей кнопки) и создайте код, как показано ниже.

First.java

@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)); 
} 

@Override 
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 в ваш манифест. Добавьте некоторые чертежи, что бы они ни требовали в second.java с вашими чертежами. И, см. Пример от GitHub

+0

Благодаря @SpK мой файл находится в папке с ресурсами и я хочу прочитать его из актива --- файл: /// android_asset/test.pdf .... Я пробовал это ....... openPdfIntent ("file: /// android_asset/test.pdf "); ...... logcat .... ST = 'файл' файл: ///android_asset/test.pdf 'not found' – MAC

+2

+1, но он также очень медленный и отображает символы JUNK. .. – MAC

+0

@spk привет сэр Я использую решение, которое вы упомянули, но получая эту ошибку E/AndroidRuntime (23933): java.lang.NoClassDefFoundError: com.pdf.view.Second вы можете мне помочь – Nitin

2

Мне никогда не приходилось это делать, но вы могли бы использовать библиотеку, например iText, для программного доступа к файлу PDF, а затем отображения PDF.

+0

- iText поддерживает Android ???? – MAC

+0

Да, версия JAVA может быть включена в проект Android. – glen3b

9

Некоторые телефоны (например, Nexus One) поставляются с предустановленной версией Quickoffice, поэтому может быть так же просто, как отправить соответствующее намерение после того, как вы сохранили файл на SD-карте.

public class OpenPdf extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button button = (Button) findViewById(R.id.OpenPdfButton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       File file = new File("/sdcard/example.pdf"); 

       if (file.exists()) { 
        Uri path = Uri.fromFile(file); 
        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setDataAndType(path, "application/pdf"); 
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

        try { 
         startActivity(intent); 
        } 
        catch (ActivityNotFoundException e) { 
         Toast.makeText(OpenPdf.this, 
          "No Application Available to View PDF", 
          Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 
     }); 
    } 
} 
+0

Разве это не из сферы темы? – MSaudi