ich in beiden Fällen auf dieser Aufgabe versagt:Wie PDF auf Android machen PdfRenderer mit
1. Der Versuch, es aus dem Telefonspeicher zu öffnen
2. Der Versuch, es von der öffnen Vermögenswerte
ich habe render() Methode, die in 1. Fall ist, die wie folgt aus:
private void render() {
try {
imageView = (ImageView) findViewById(R.id.page);
int REQ_WIDTH = 1;
int REQ_HEIGHT = 1;
REQ_WIDTH = imageView.getWidth();
REQ_HEIGHT = imageView.getHeight();
Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444);
File file = new File(Environment.getExternalStorageDirectory() + "/Download/test.pdf");
PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY));
if (currentPage < 0) {
currentPage = 0;
} else if (currentPage > renderer.getPageCount()) {
currentPage = renderer.getPageCount() - 1;
}
Matrix matrix = imageView.getImageMatrix();
Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);
renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
imageView.setImageMatrix(matrix);
imageView.setImageBitmap(bitmap);
imageView.invalidate();
renderer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Der interessanteste Teil der geworfenen Ausnahme is here. Wenn Sie ganze Logs sehen wollen click here.
Und ja, ich habe hinzugefügt benötigt Erlaubnis in AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.john.pdfreader">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".BookActivity">
<intent-filter>
<action android:name="com.example.itatriev.schoolreader.BookActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
Lassen Sie sich auf dem 2. Fall einen Blick (aus dem Vermögen zu lesen):
// ...previous code
ParcelFileDescriptor input = getAssets().openFd("test.pdf").getParcelFileDescriptor();
PdfRenderer renderer = new PdfRenderer(input);
// ..previous code
In diesem Fall es sagt das selbe, aber wenn ich mich richtig erinnere, gab es smth, cannot create document
sagend, aber jetzt ist es weg und Ausnahme sieht das selbe aus. Wie auch immer, warum begann ich über den zweiten Fall zu sprechen? There's an open issue sagen, dass META-INF
sollte am Ende der apk sein. Meins ist am Ende und es funktioniert immer noch nicht.
Ehrlich gesagt habe ich sogar ein Beispiel aus Androidstudio selbst ausprobiert. Und weisst du was? Es funktioniert! Aber nur mit ihrer sample.pdf
und wenn ich versuche, es durch meine zu ersetzen, stürzt es einfach ab. Hast du eine Idee, was ich versuchen kann, um PDF-Rendering auf meinem Android zu machen?
Alles wurde auf Nexus 5, Android 6.0 Marshmallow getestet.