web-dev-qa-db-fra.com

Comment rendre PDF dans Android

Dans mon application, je vais recevoir un flux d'octets et le convertir en fichier pdf dans la mémoire du téléphone. Comment puis-je rendre cela en pdf? Et le montrer sur une activité?

77
Mikey

Certains téléphones (comme le Nexus One) sont livrés avec une version de Quickoffice préinstallée. Il peut donc être aussi simple que 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();
                    }
                }
            }
        });
    }
}
114
Tim Kryger

Ouvrir le fichier pdf dans webview .

public class MyPdfViewActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WebView mWebView=new WebView(MyPdfViewActivity.this);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+LinkTo);
    setContentView(mWebView);
  }
}
16
Shankar Agarwal

Android-Lollipop (api 21) introduit une nouvelle API: PdfRenderer

Cette API vous permet de créer un bitmap à partir d'une page d'un PDF document.

Prochainement :

  • obtenez un descripteur de fichier recherché de votre document pdf:

    ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
    
  • créer le PdfRenderer

    PdfRenderer renderer = new PdfRenderer(fd);
    
  • préparer le bitmap

    Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
    
  • récupère le PdfRenderer.Page à rendre

    PdfRenderer.Page page = renderer.openPage(pageIndex);
    
  • rendre la page sur le bitmap préparé

    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    
  • maintenant, vous pouvez faire ce que vous voulez avec le bitmap.

  • notez que les 2 arguments nuls peuvent vous permettre de couper une partie de la page et d'effectuer une transformation (à l'aide de Matrix ) du clip
  • il existe un autre mode de rendu: RENDER_MODE_FOR_PRINT . Si vous avez besoin de ce mode, il existe quelques directives pour l'utiliser correctement: voici les détails .

Voici un exemple complet d'utilisation de cette nouvelle API

7
ben75

Cette bibliothèque est simple et fonctionne bien: Android Pdf Viewerhttps://github.com/barteksc/AndroidPdfViewer

Ancienne réponse ...

Je pense que Joan Zapata nous donne la solution la meilleure et la plus simple:

https://github.com/JoanZapata/Android-pdfview

Je vous assure que ça marche!

1 : https://github.com/JoanZapata/Android-pdfview

5
Alecs

Pour les fichiers pdf locaux, vous pouvez les rendre via les bibliothèques tierces. Par exemple, utilisez bibliothèque MuPDF , ses types de fichiers pris en charge incluent les formats PDF, PNG et JPEG.

L'un des inconvénients de MuPDF est qu'il utilise une bibliothèque native pour répondre à la cible. Il ne sera donc pas facile de porter l'application ultérieurement sur la plateforme BlackBerry.

3
Zephyr

Pour ouvrir un pdf à partir d'un tableau d'octets, vous pouvez utiliser RadaeePDF, vous pouvez effectuer les opérations suivantes dans votre activité:

private PDFReader m_vPDF = null;
private Document doc = new Document();

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Global.Init(this);

    m_vPDF = new PDFReader(this);
    doc.Close();

    int ret = m_doc.OpenMem(data, password);
        switch( ret )
        {
            case -1://need input password
                finish();
                break;
            case -2://unknown encryption
                finish();
                break;
            case -3://damaged or invalid format
                finish();
                break;
            case -10://access denied or invalid file path
                finish();
                break;
            case 0://succeeded, and continue
                break;
            default://unknown error
                finish();
                break;
        }

    m_vPDF.open(doc);

    setContentView( m_vPDF );
}
0
Nermeen