【发布时间】:2018-03-13 01:19:36
【问题描述】:
我在我的应用程序中使用 Android Render,但从 URI 获取 PDF 文件时遇到问题。
以下是我获取文件 URI 的方法:
public void performFileSearch() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
startActivityForResult(intent, READ_REQUEST_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
uri = null;
if (resultData != null) {
uri = resultData.getData();
pageNumber = 0;
render(uri);
}
}
}
然后在render(Uri uri):
private void render(Uri uri) {
try {
img = (ImageView) findViewById(R.id.image);
int width = img.getWidth();
int height = img.getHeight();
previous.setText(uri.toString());
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
File file = new File(uri.getPath());
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 = img.getImageMatrix();
Rect rect= new Rect(0,0, width , height);
renderer.openPage(currentpage).render(bitmap,rect,matrix , PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY );
img.setImageMatrix(matrix);
img.setImageBitmap(bitmap);
img.invalidate();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Nope", Toast.LENGTH_LONG);
}
}
活动只显示白屏。我想问题在于从 URI 创建文件。你知道如何从我得到的 URI 中制作文件吗?提前致谢。
【问题讨论】:
-
试试 Uri.fromFile(new File(uri.getPath()))
-
它与 File file = new File(uri.getPath()); 有何不同?
-
传入的数据实际上是一个文件吗?或者它是一个网址?因为 File 不能保存 URL,它意味着磁盘上的实际文件。
标签: android pdf pdfrenderer