50 votes

Comment lire un pdf dans mon application Android ?

Je suis en train de réaliser une application qui nécessite d'ouvrir des pdf.

J'ai également quelques pdf dans un dossier d'actifs et je ne suis pas en mesure de les ouvrir directement dans le webview.

Par défaut, Android ne prend pas en charge les pdf.

Existe-t-il une API qui fonctionne sur Android (sauf MuPdf) ?

Mon appareil n'a pas de lecteur de pdf installé, donc ACTION VIEW n'est pas utile pour moi.

Ce qui suit ne fonctionne pas.......

Comment rendre un fichier PDF dans Android

Ouvrir un fichier d'actifs pdf dans une application

Pouvez-vous me suggérer une bonne api ?

0 votes

0 votes

Merci, j'ai déjà essayé... mais ça ne marche pas pour moi.

0 votes

62voto

Praveen Points 9516

J'ai simplement fait cela en utilisant PdfViewer.jar (téléchargez-le avec le bouton bleu) et faire un code comme ci-dessous.

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

J'espère que cela vous aidera beaucoup. Essayez ceci. N'oubliez pas d'ajouter votre Second.java dans votre manifeste. Ajoutez les éléments à dessiner dont vous avez besoin dans second.java avec vos objets à dessiner. Et, référez-vous à l'exemple de GitHub

0 votes

Merci @SpK mon fichier est dans le dossier Asset et je veux le lire depuis Asset --- file:///android_asset/test.pdf.... j'ai essayé ceci....... openPdfIntent("file:///android_asset/test.pdf") ; ......logcat.... ST='Fichier 'file:///android_asset/test.pdf' non trouvé'.

3 votes

+1 mais il est aussi très lent et affiche des caractères JUNK....

0 votes

@spk hello sir J'utilise la solution que vous avez mentionnée mais j'obtiens cette erreur E/AndroidRuntime(23933) : java.lang.NoClassDefFoundError : com.pdf.view.Second pouvez-vous m'aider s'il vous plaît ?

9voto

Gautam Vasoya Points 624

Certains téléphones (comme le Nexus One) sont équipés d'une version de Quickoffice préinstallée. Il suffit donc d'envoyer l'intention appropriée une fois que vous avez enregistré le fichier sur la carte 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(); 
                    } 
                } 
            } 
        }); 
    } 
}

1 votes

Ce sujet n'est-il pas hors sujet ?

1voto

glen3b Points 136

Je n'ai jamais eu besoin de faire cela, mais vous pourriez probablement utiliser une bibliothèque comme iText pour accéder au fichier PDF de manière programmatique, puis afficher le PDF.

0 votes

IText est-il compatible avec Android ? ???

0 votes

Oui, la version JAVA peut être incluse dans un projet Android.

5 votes

Mais ce n'est pas gratuit

0voto

Raj Points 78

Visionneuse Pdf Android

http://code.google.com/p/apv/ S'il vous plaît suivez le lien et c'est un Android pdf viewer gratuit, vous pouvez utiliser dans votre propre application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X