Comment rendre le PDF dans Android

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

Certains téléphones (tels que 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 le fichier enregistré 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(); } } } }); } } 

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

Android-Lollipop (api 21) présente une nouvelle API: PdfRenderer

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

Prochainement :

  • obtenir un descripteur de fichier pouvant être recherché à 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); 
  • obtenir le PdfRenderer.Page pour 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 null peuvent vous permettre de découper une partie de la page et d’effectuer une transformation (à l’aide d’une masortingce ) du clip
  • il existe un autre mode de rendu: RENDER_MODE_FOR_PRINT . Si vous avez besoin de ce mode, il existe des directives pour l’utiliser correctement: voici les détails .

Voici un exemple complet d’utilisation de cette nouvelle API

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

Vieille réponse …

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

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

Je vous assure que cela fonctionne!

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

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

L’un des inconvénients de MuPDF est qu’il utilise une bibliothèque native pour atteindre la cible, il ne sera donc pas facile de porter l’application sur la plate-forme BlackBerry ultérieurement.

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