Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PdfRenderer在Android上呈现PDF_Android_Pdf_Android Studio - Fatal编程技术网

如何使用PdfRenderer在Android上呈现PDF

如何使用PdfRenderer在Android上呈现PDF,android,pdf,android-studio,Android,Pdf,Android Studio,我在这两种情况下都失败了: private void render() { try { imageView = (ImageView) findViewById(R.id.page); int REQ_WIDTH = 1; int REQ_HEIGHT = 1; REQ_WIDTH = imageView.getWidth(); REQ_HEIGHT = imageView.getHeight();

我在这两种情况下都失败了:

private void render() {
    try {
        imageView = (ImageView) findViewById(R.id.page);

        int REQ_WIDTH = 1;
        int REQ_HEIGHT = 1;
        REQ_WIDTH = imageView.getWidth();
        REQ_HEIGHT = imageView.getHeight();

        Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444);

        File file = new File(Environment.getExternalStorageDirectory() + "/Download/test.pdf");

        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 = imageView.getImageMatrix();
        Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);

        renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

        imageView.setImageMatrix(matrix);
        imageView.setImageBitmap(bitmap);
        imageView.invalidate();
        renderer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}
1。试图从手机存储器中打开它
2.试图从资产中打开它

private void render() {
    try {
        imageView = (ImageView) findViewById(R.id.page);

        int REQ_WIDTH = 1;
        int REQ_HEIGHT = 1;
        REQ_WIDTH = imageView.getWidth();
        REQ_HEIGHT = imageView.getHeight();

        Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444);

        File file = new File(Environment.getExternalStorageDirectory() + "/Download/test.pdf");

        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 = imageView.getImageMatrix();
        Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);

        renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

        imageView.setImageMatrix(matrix);
        imageView.setImageBitmap(bitmap);
        imageView.invalidate();
        renderer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}
我有render()方法,在第一种情况下如下所示:

private void render() {
    try {
        imageView = (ImageView) findViewById(R.id.page);

        int REQ_WIDTH = 1;
        int REQ_HEIGHT = 1;
        REQ_WIDTH = imageView.getWidth();
        REQ_HEIGHT = imageView.getHeight();

        Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444);

        File file = new File(Environment.getExternalStorageDirectory() + "/Download/test.pdf");

        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 = imageView.getImageMatrix();
        Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);

        renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

        imageView.setImageMatrix(matrix);
        imageView.setImageBitmap(bitmap);
        imageView.invalidate();
        renderer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}
让我们看看第二个案例(从资产中阅读):

private void render() {
    try {
        imageView = (ImageView) findViewById(R.id.page);

        int REQ_WIDTH = 1;
        int REQ_HEIGHT = 1;
        REQ_WIDTH = imageView.getWidth();
        REQ_HEIGHT = imageView.getHeight();

        Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444);

        File file = new File(Environment.getExternalStorageDirectory() + "/Download/test.pdf");

        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 = imageView.getImageMatrix();
        Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);

        renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

        imageView.setImageMatrix(matrix);
        imageView.setImageBitmap(bitmap);
        imageView.invalidate();
        renderer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}
在本例中,它说的是相同的,但如果我没记错的话,smth说,
无法创建文档
,但现在它消失了,异常看起来是一样的。不管怎样,为什么我要开始谈论第二个案子?说META-INF应该在apk的末尾。我的是最后一个,它仍然不工作

private void render() {
    try {
        imageView = (ImageView) findViewById(R.id.page);

        int REQ_WIDTH = 1;
        int REQ_HEIGHT = 1;
        REQ_WIDTH = imageView.getWidth();
        REQ_HEIGHT = imageView.getHeight();

        Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444);

        File file = new File(Environment.getExternalStorageDirectory() + "/Download/test.pdf");

        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 = imageView.getImageMatrix();
        Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);

        renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

        imageView.setImageMatrix(matrix);
        imageView.setImageBitmap(bitmap);
        imageView.invalidate();
        renderer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}
坦白说,我甚至试过Androidstudio本身的一个例子。你知道吗?它起作用了!但是只有在他们的
sample.pdf
中,当我试图用我的替换它时,它就崩溃了。你知道我可以尝试在Android上制作什么样的pdf渲染吗

private void render() {
    try {
        imageView = (ImageView) findViewById(R.id.page);

        int REQ_WIDTH = 1;
        int REQ_HEIGHT = 1;
        REQ_WIDTH = imageView.getWidth();
        REQ_HEIGHT = imageView.getHeight();

        Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444);

        File file = new File(Environment.getExternalStorageDirectory() + "/Download/test.pdf");

        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 = imageView.getImageMatrix();
        Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);

        renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

        imageView.setImageMatrix(matrix);
        imageView.setImageBitmap(bitmap);
        imageView.invalidate();
        renderer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}

所有内容都在Nexus 5、Android 6.0棉花糖上进行了测试。

除了清单中的权限外,您可能还需要明确请求权限。比如:

private void render() {
    try {
        imageView = (ImageView) findViewById(R.id.page);

        int REQ_WIDTH = 1;
        int REQ_HEIGHT = 1;
        REQ_WIDTH = imageView.getWidth();
        REQ_HEIGHT = imageView.getHeight();

        Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444);

        File file = new File(Environment.getExternalStorageDirectory() + "/Download/test.pdf");

        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 = imageView.getImageMatrix();
        Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);

        renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

        imageView.setImageMatrix(matrix);
        imageView.setImageBitmap(bitmap);
        imageView.invalidate();
        renderer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}
int permission = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);

if (permission != PackageManager.PERMISSION_GRANTED)
{
    // We don't have permission so prompt the user
    ActivityCompat.requestPermissions(getActivity(), PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
}