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é?
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();
}
}
}
});
}
}
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);
}
}
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.
Voici un exemple complet d'utilisation de cette nouvelle API
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!
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.
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 );
}