在Android应用中加载和查看本地(捆绑)pdf

时间:2015-05-29 17:35:28

标签: android pdf

我已经审核并尝试过多个版本的此问题无济于事。我早在2011年和最近的2014年中期就已经看到了答案。不幸的是,许多部分答案和解释不当的建议创造了更多问题而不是答案。我在iTunes App Store中提供了一个Apple应用程序,可以执行我尝试使用此Android应用程序执行的所有操作。在Apple App世界中,查看pdf文件相对容易执行,但我很难在Android中完成它。我承认我在创建Android应用程序方面的经验非常有限。

问题是我有一个主要活动的Android应用程序,它有一个ListView,列出了大约35个pdf格式图表的标题。这些中的每一个都是可点击的,以便在全屏活动(视图)中查看。每个pdf是半页宽度,长度从1/2页到2页不等。所以新活动(pdf视图)需要可滚动。由于这是用于手机或平板电脑的应用程序,因此新活动(pdf视图)需要可缩放。在用户完成对pdf的查看后,他们将需要一个选项来返回主活动。然后,用户可以选择另一个图表进行查看。

我已经完成的事情是: - 主要活动图表标题的列表视图 - 为ListView中的每个条目启用监听器 - 访问新活动(pdf视图) - 使用putExtras - getExtras进行变量传递,正在运行

一些代码(来自main activity.java):

    @Override
    public void onClick(View v) {

        String scroll_page = new String("CommonVehicleCodeViolations.pdf");

        Intent intent = new Intent(this, scroll_view.class);
        intent.putExtra("extra_scroll_page", scroll_page);
        startActivity(intent);

    }

图表标题是硬编码用于测试目的。现在,来自新活动的一些代码(pdf视图)'scroll_view.java':

public class scroll_view extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scroll_view);

        Bundle extras = getIntent().getExtras();
        String scroll_page = null;
        if (extras != null) {
            scroll_page = extras.getString("extra_scroll_page");
        }

        int currentPage = 1;
        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        Bitmap bitmap = Bitmap.createBitmap(500,500, Bitmap.Config.ARGB_4444);

        try {
            File file = new File(getFilesDir(), scroll_page);
            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;
            }

            renderer.openPage(currentPage).render(bitmap, new Rect(0, 0, 500, 500), new Matrix(),PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
            imageView.setImageBitmap(bitmap);
            imageView.invalidate();

        } catch (IOException e) {
            e.printStackTrace();
        }

这是尝试使用许多已经发布的答案之一,建议使用PdfRenderer。我从这个例子得到的是新活动(pdf视图)空白屏幕。我希望2015年会带来新的答案。请帮忙。

1 个答案:

答案 0 :(得分:1)

为什么不尝试使用意图,让系统显示兼容的应用列表:

File file = new File(getFilesDir(), scroll_page);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);