Comment rendre PDF dans Android

dans mon application je vais recevoir un flux octet et le convertir en un fichier pdf dans la mémoire du téléphone. Comment puis-je effectuer le rendu d'un fichier pdf? Et le montrer dans une activité?

76
demandé sur Janusz 2010-05-21 19:21:00

6 réponses

certains téléphones (comme le Nexus One) viennent avec une version de Quickoffice pré-installé de sorte qu'il peut être aussi facile que d'envoyer L'intention appropriée une fois que vous avez enregistré le fichier à 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();
                    }
                }
            }
        });
    }
}
113
répondu Tim Kryger 2010-05-21 21:35:28

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);
  }
}
17
répondu Shankar Agarwal 2012-06-02 10:16:00

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

cette API vous permet de créer un Bitmap à partir d'une page dans un document PDF.

sous peu:

  • obtenez un descripteur de fichier seekable à partir 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);
    
  • get PdfRenderer.La Page pour rendre

    PdfRenderer.Page page = renderer.openPage(pageIndex);
    
  • le rendu de la page sur la bitmap

    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 args null peuvent vous permettre de Clipper une partie dans le page et effectuer une transformation (en utilisant un Matrix ) du clip
  • il existe un autre mode de rendu: RENDER_MODE_FOR_PRINT . Si vous avez besoin de ce mode il y a quelques lignes directrices pour l'utiliser correctement : voici les détails .

voici un exemple complet sur la façon d'utiliser cette nouvelle API

5
répondu ben75 2014-11-08 11:26:46

Cette bibliothèque est simple et fonctionne bien: Android PDF Viewer https://github.com/barteksc/AndroidPdfViewer

Ancienne Réponse...

je pense que Joan Zapata nous donner la meilleure solution et simple:

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

je vous assure que ça marche!

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

4
répondu Alecs 2017-01-04 11:48:32

pour les fichiers pdf locaux, vous pouvez les rendre à travers les bibliothèques tierces. par exemple , utilisez la MuPDF bibliothèque , ses types de fichiers pris en charge comprennent PDF, PNG et JPEG.

un défaut de MuPDF est qu'il utilise bibliothèque natif pour atteindre la cible, il ne sera donc pas facile de porter l'application sur la plate-forme BlackBerry plus tard.

3
répondu Zephyr 2014-06-18 13:30:04

pour ouvrir un pdf à partir d'un tableau d'octets, vous pouvez utiliser RadaeePDF , vous pouvez faire ce qui suit 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
répondu Nermeen 2014-11-21 09:13:34