In meiner Anwendung erhalte ich einen Bytestream und konvertiere ihn in eine PDF-Datei im Telefonspeicher. Wie rendere ich das in ein PDF? Und es auf einer Aktivität zeigen?
Antworten:
Auf einigen Telefonen (wie dem Nexus One) ist eine Version von Quickoffice vorinstalliert, sodass es möglicherweise so einfach ist, die entsprechende Absicht zu senden, sobald Sie die Datei auf der SD-Karte gespeichert haben.
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();
}
}
}
});
}
}
Öffnen Sie die PDF-Datei in der Webansicht .
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) stellt eine neue API vor: PdfRenderer
Mit dieser API können Sie eine Bitmap aus einer Seite in einem PDF-Dokument erstellen.
In Kürze :
Holen Sie sich einen durchsuchbaren Dateideskriptor aus Ihrem PDF-Dokument:
ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
Erstellen Sie den PdfRenderer
PdfRenderer renderer = new PdfRenderer(fd);
Bereiten Sie die Bitmap vor
Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
Holen Sie sich die PdfRenderer.Page zum Rendern
PdfRenderer.Page page = renderer.openPage(pageIndex);
Rendern Sie die Seite auf der vorbereiteten Bitmap
page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
Jetzt können Sie mit der Bitmap machen, was Sie wollen.
Beachten Sie, dass Sie mit den 2 Nullargumenten möglicherweise einen Teil der Seite ausschneiden und eine Transformation (mithilfe einer Matrix ) des Clips durchführen können
Es gibt einen anderen Rendering-Modus: RENDER_MODE_FOR_PRINT . Wenn Sie diesen Modus benötigen, gibt es einige Richtlinien, um ihn richtig zu verwenden: Hier sind die Details .
Diese Bibliothek ist einfach und funktioniert gut: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer
Alte Antwort ...
Ich denke, Joan Zapata gibt uns die bessere und einfachere Lösung:
https://github.com/JoanZapata/android-pdfview
Ich versichere Ihnen, dass es funktioniert!
pdfView.fromAsset(pdfName)
? Ich habe versucht, den absoluten Pfad zu verwenden, aber die Datei wurde nicht gefunden (und ich bin sicher, dass sie vorhanden ist). Beispiel: /data/data/package.name/files/images/filename.pdf
Die lokalen PDF-Dateien können über die Bibliotheken von Drittanbietern gerendert werden. Verwenden Sie beispielsweise die MuPDF-Bibliothek . Zu den unterstützten Dateitypen gehören PDF, PNG und JPEG.
Ein Nachteil von MuPDF ist, dass es eine native Bibliothek verwendet, um das Ziel zu erreichen, sodass es später nicht einfach ist, die Anwendung auf die BlackBerry-Plattform zu portieren.
Um ein PDF aus einem Byte-Array zu öffnen, können RadaeePDF
Sie Folgendes für Ihre Aktivität tun:
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 );
}