2012-04-24 8 views
48

Ich mache eine Anwendung, die PDF öffnen muss.Wie pdf in meiner Android-Anwendung zu lesen?

Ich habe auch einige pdf in Asset-Ordner, so dass ich nicht in der Lage bin, es in Webview direkt zu öffnen.

Standardmäßig unterstützt Android nicht pdf.

Gibt es eine API, die auf Android funktioniert (außer MuPdf)?

Mein Gerät keinen PDF-Reader so ACTION VIEW installiert ist für mich nicht hilfreich

Nach nicht funktioniert .......

Render a PDF file using Java on Android

Open asset file pdf in application

können Sie mir vorschlagen, eine gute api ...

danke im voraus ...

+0

[Nur versuchen diese] (http://code.google.com/p/apv/) – Praveenkumar

+0

Dank i bereits das für mich versucht haben ... nicht funktioniert – MAC

+0

@ZazGmy: Seite nicht gefunden. .. – MAC

Antwort

60

Ich habe einfach das mit PdfViewer.jar (laden Sie es mit dem blauen Knopf) und einen Code wie unten gemacht.

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

Hoffnung, dies hilft Ihnen viel. Versuche dies. Vergessen Sie nicht, Ihre Second.java in Ihrem Manifest hinzuzufügen. Fügen Sie mit Ihren Drawables in second.java einige Zeichenobjekte hinzu, was immer Sie benötigen. Und, siehe das Beispiel von GitHub

+0

Dank @SpK meine Datei ist in Asset-Ordner und ich möchte es von Asset lesen --- Datei: /// android_asset/test.pdf .... ich habe das versucht ....... openPdfIntent ("file: /// android_asset/test.pdf "); ...... logcat .... ST = 'Datei' Datei: ///android_asset/test.pdf 'nicht gefunden' – MAC

+2

+1 aber es ist auch sehr langsam und zeigt JUNK Zeichen .. .. – MAC

+0

@spk Hallo Sir Ich verwende die Lösung, die Sie erwähnt haben, aber diesen Fehler erhalten E/AndroidRuntime (23933): java.lang.NoClassDefFoundError: com.pdf.view.Second können Sie mir bitte helfen – Nitin

2

Ich habe das nie getan, aber Sie könnten wahrscheinlich eine Bibliothek wie iText verwenden, um auf die PDF-Datei programmgesteuert zuzugreifen, und dann die PDF anzeigen.

+0

ist iText unterstützt Android ???? – MAC

+0

Ja, die JAVA-Version kann in einem Android-Projekt enthalten sein. – glen3b

9

Einige Telefone (wie das Nexus One) sind mit einer vorinstallierten Version von Quickoffice ausgestattet, so dass es nach dem Speichern der Datei auf die SD-Karte so einfach wie das Senden des entsprechenden Intents sein kann.

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

ist das nicht außerhalb des Geltungsbereichs? – MSaudi

Verwandte Themen