【问题标题】:Render PDF from URI in Android?在 Android 中从 URI 渲染 PDF?
【发布时间】: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


【解决方案1】:

代替:

File file = new File(uri.getPath());
PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY));

使用这个:

ParcelFileDescriptor fileDescriptor =context.getContentResolver().openFileDescriptor(uri, "r");
PdfRenderer renderer = new PdfRenderer(fileDescriptor, ParcelFileDescriptor.MODE_READ_ONLY);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2017-03-28
    • 2011-02-22
    • 1970-01-01
    • 2023-03-15
    • 2011-01-28
    相关资源
    最近更新 更多