50 Stimmen

Wie kann ich pdf in meiner Android-Anwendung lesen?

Ich mache eine Anwendung, die pdf öffnen muss.

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

Android unterstützt standardmäßig keine PDF-Dateien.

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

Auf meinem Gerät ist kein PDF-Reader installiert, daher ist ACTION VIEW für mich nicht hilfreich.

Das Folgende funktioniert nicht.......

Wie man eine PDF-Datei in Android rendert

Asset-Datei pdf in Anwendung öffnen

Können Sie mir eine gute Api empfehlen?

62voto

Praveenkumar Punkte 25555

Ich habe das einfach gemacht mit PdfViewer.jar (über den blauen Button herunterladen) und einen Code wie unten eingeben.

Erste.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();
    }
}

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

Ich hoffe, das hilft Ihnen sehr. Versuchen Sie dies. Vergessen Sie nicht, Ihre Second.java in Ihrem Manifest. Fügen Sie einige Drawables, was auch immer es erfordert, in second.java mit Ihren Zeichengeräten. Und, siehe das Beispiel aus GitHub

9voto

Gautam Vasoya Punkte 873

Auf einigen Handys (z. B. dem Nexus One) ist eine Version von Quickoffice vorinstalliert, so dass Sie einfach die entsprechende Absicht senden können, nachdem Sie die Datei auf der SD-Karte gespeichert haben.

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

1voto

glen3b Punkte 693

Ich musste dies noch nie tun, aber Sie könnten wahrscheinlich eine Bibliothek wie iText um programmatisch auf die PDF-Datei zuzugreifen und die PDF-Datei anzuzeigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X