1

我已经在外部存储目录中下载了一个 pdf 文件,我想在 android 中使用 pdfrender 对其进行重新编译。我已经成功渲染了保存在我的资产文件夹中的 pdf,但现在我需要渲染保存在外部目录中的文件。这是我正在使用的代码

String filePath1 = Environment.getExternalStorageDirectory().toString()+"/Mock-up Presentation.pdf"; //filePath1 is the location for file i want to render File file = new File(filePath1); mFileDescriptor=getActivity().getAssets().openFd("sample.pdf").getParcelFileDescriptor();//sample pdf is saved in asset folder in project which i have rendered //already // This is the PdfRenderer we use to render the PDF. mPdfRenderer = new PdfRenderer(mFileDescriptor);

任何帮助,将不胜感激。

4

1 回答 1

0

如果您在针对 android 9+ 的项目中遇到此问题,请获取完整的解决方案代码。从这里 然后你可以按照一些步骤: 步骤 1:打开一个意图选择 PDF 文件。

/此代码将有助于打开 Intent.. /

public final int PDF_REQUEST_CODE =1200;
Intent intent=new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
startActivityForResult(intent,PDF_REQUEST_CODE);

第 2 步:现在捕获上述意图返回的结果。

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) 
{ 
 super.onActivityResult(requestCode, resultCode, data);
 if(requestCode==PDF_REQUEST_CODE && resultCode == Activity.RESULT_OK)
 {
  Uri uri=data.getData();
  PdfRendererBasicViewModel pdfRendererBasicViewModel =new 
  ViewModelProvider(this).get(PdfRendererBasicViewModel.class);              
  pdfRendererBasicViewModel.setUri(uri);
  getSupportFragmentManager().beginTransaction()
                        .add(R.id.container, new PdfRendererBasicFragment())
                        .commitNow();
 }
}

第 3 步:需要对 pdfRendererBasicViewModel 类进行一些修改。首先需要在视图模型中声明设置/获取文件 Uri 的方法。正如我们所说的 setUri()。在 onActivityResult() 方法中。

在那次更新之后,用私有静态 Uri uri 替换 openPdfRenderer() 方法;` private void openPdfRenderer() 抛出 IOException {

    if(getUri()!=null){
        
         mFileDescriptor =
                getApplication().getContentResolver().openFileDescriptor(getUri(), "r");
    }
    if (mFileDescriptor != null) {
        mPdfRenderer = new PdfRenderer(mFileDescriptor);
    }
}`

现在尝试运行...

如果您想要一个完整的解决方案,那么您可以从 github 此处导入

于 2021-06-09T18:35:41.927 回答