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é?
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();
}
}
}
});
}
}
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) 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
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!
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.
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 );
}