Я использовал приведенный ниже код, пожалуйста, проверил его.
PdfRenderer.Page page = null;
Bitmap mBitmap;
try {
descriptor = getSeekableFileDescriptor(documentPath);
renderer = new PdfRenderer(descriptor);
page = renderer.openPage(0);
Bitmap bitmap = Bitmap.createBitmap(page.getWidth(), page.getHeight(),Bitmap.Config.ARGB_8888);
page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);
page.close();
renderer.close();
response.invoke(params);
} catch (SecurityException e) {
Log.e(TAG, "SecurityException exception found: " + e);
if (page != null)
page.close();
if (renderer != null)
renderer.close();
} catch (Exception e) {
Log.e(TAG, "getPDFThumbnail exception found: " + e);
if (page != null)
page.close();
if (renderer != null)
renderer.close();
}
protected ParcelFileDescriptor getSeekableFileDescriptor(String path) throws IOException {
ParcelFileDescriptor parcelFileDescriptor = null;
File pdfCopy = new File(path);
if (pdfCopy.exists()) {
parcelFileDescriptor = ParcelFileDescriptor.open(pdfCopy, ParcelFileDescriptor.MODE_READ_ONLY);
return parcelFileDescriptor;
}
parcelFileDescriptor = this.reactContext.getApplicationContext().getContentResolver().openFileDescriptor(Uri.parse(path), "r");
return parcelFileDescriptor;
}
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.location.gps" />
<uses-feature android:name="android.hardware.location.location" />
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="22" />
<application
android:name=".MainApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:hardwareAccelerated="true"
android:vmSafeMode="true"
android:largeHeap="true"
android:theme="@style/AppTheme">
</application>
Шаги: Сначала выберите защищенный паролем файл PDF, затем он напрямую выдаст исключение SecurityException, которое действительноно если я снова выберу обычный Pdf, который не защищен паролем, но он также вызывает исключение SecurityException.