无法在新活动中打开pdf

时间:2018-02-23 13:07:03

标签: android pdf render

我在项目中使用this github来源。我在assets文件夹中包含10个元素和10个不同PDF的列表视图。在1项活动中,我使用listviewonItemClickListener,如下所示:

ArrayAdapter arrayAdapter = new ArrayAdapter<>(this, R.layout.activity_policy_list, mobileArray);
        ListView listView = (ListView) findViewById(R.id.policy_list);
        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(PolicyActivity.this, PdfViewerActivity.class);
                intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, getAssets() + "/dummy.pdf");
                startActivity(intent);
            }
        });  

PdfViewerActivity类的代码如下:

package com.dell.eventapp.ui.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.dell.eventapp.R;

public class PdfViewerActivity extends net.sf.andpdf.pdfviewer.PdfViewerActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdf_viewer);
    }

    @Override
    public int getPreviousPageImageResource() {
        return R.drawable.left_arrow;
    }

    @Override
    public int getNextPageImageResource() {
        return R.drawable.right_arrow;
    }

    @Override
    public int getZoomInImageResource() {
        return R.drawable.zoom_in;
    }

    @Override
    public int getZoomOutImageResource() {
        return R.drawable.zoom_out;
    }

    @Override
    public int getPdfPasswordLayoutResource() {
        return 0;
    }

    @Override
    public int getPdfPageNumberResource() {
        return 0;
    }

    @Override
    public int getPdfPasswordEditField() {
        return 0;
    }

    @Override
    public int getPdfPasswordOkButton() {
        return 0;
    }

    @Override
    public int getPdfPasswordExitButton() {
        return 0;
    }

    @Override
    public int getPdfPageNumberEditField() {
        return 0;
    }
}

当我点击列表视图中的任何项目时,应打开新活动,并在新活动中查看PDF。当我运行我的代码时,我总是会收到此错误:

02-23 18:19:48.033 8982-8982/com.dell.eventapp I/PDFVIEWER: ST='file 'android.content.res.AssetManager@817d40c/dummy.pdf' not found'  

我在github repo的问题中遇到了这个this issue。它说无法从Assets文件夹加载PDF。您应该在打开之前将其复制到SD卡上。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, getAssets() + "/dummy.pdf");

getAssets()会返回AssetManagergetAssets() + "/dummy.pdf"toString()个实例上调用AssetManager,然后向其/dummy.pdf添加android.content.res.AssetManager@817d40c/dummy.pdf。这就是你结束toString()的原因。 AssetManager上的{{1}}并没有以某种方式神奇地为您提供资产的文件系统路径......部分原因是资产不是设备上的文件。

  

我该如何解决这个问题?

或者:

  • 按照该问题中的说明将资产复制到文件或

  • 修改该库以支持资产,或

  • 请勿使用该库,但请使用其他支持从资源显示PDF的内容

FWIW,我有示例应用程序演示如何使用pdf.jspdfium来显示资产中的PDF。