0
public void onBrowse(View view) {
Intent chooseFile;
Intent intent;
chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
chooseFile.setType("file/*");
intent = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) return;
String path = "";
if (requestCode == ACTIVITY_CHOOSE_FILE) {
Uri uri = data.getData();
Log.v("Path:", uri.getPath());
try {
openRenderer(HomeActivity.this, uri.getPath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void openRenderer(Context context, String path) throws IOException {
// In this sample, we read a PDF from the assets directory.
File file = new File(path);
if (!file.exists()) {
// Since PdfRenderer cannot handle the compressed asset file directly, we copy it into
// the cache directory.
InputStream asset = context.getAssets().open(FILENAME);
FileOutputStream output = new FileOutputStream(file);
final byte[] buffer = new byte[1024];
int size;
while ((size = asset.read(buffer)) != -1) {
output.write(buffer, 0, size);
}
asset.close();
output.close();
}
mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
if (mFileDescriptor != null) {
try {
mPdfRenderer = new PdfRenderer(mFileDescriptor);
} catch (SecurityException e) {
Log.v("password", e.getMessage());
e.printStackTrace();
}
}
}
訪問
問題是,密碼保護的PDF越來越安全異常。密碼保護的PDF不被PdfRenderer
java.lang.SecurityException: cannot create document. Error: 4 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.graphics.pdf.PdfRenderer.nativeCreate(Native Method) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.graphics.pdf.PdfRenderer.(PdfRenderer.java:157) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at com.sbw.pdfrendererview.HomeActivity.openRenderer(HomeActivity.java:205) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at com.sbw.pdfrendererview.HomeActivity.onActivityResult(HomeActivity.java:157) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.app.Activity.dispatchActivityResult(Activity.java:7273) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.app.ActivityThread.deliverResults(ActivityThread.java:4520) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.app.ActivityThread.handleSendResult(ActivityThread.java:4567) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.app.ActivityThread.-wrap22(ActivityThread.java) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1695) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.os.Looper.loop(Looper.java:154) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6780) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at java.lang.reflect.Method.invoke(Native Method) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) 10-18 09:19:16.562 19058-19058/com.sbw.pdfrendererview W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
所以有什麼事情,我們可以在android中打開一個受保護的PDF預覽? –
@SumantaBanerjee:可能有一個商業圖書館可以做到這一點。你可以看到['PDF.js'或'AndroidPdfViewer'](https://commonsware.com/blog/2017/01/04/options-viewing-pdfs.html)是否有能力做到這一點,儘管我做不記得看到它。 – CommonsWare
PdfBox可以做到,但有時會被竊聽。我正在做的是:如果有密碼,請使用PdfBox,否則使用原生的'PdfRenderer'。另一種方法是使用PdfBox將文件保存在應用程序數據緩存中,而不使用密碼,然後使用本機「PdfRenderer」來顯示。 – 0101100101