首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFrenderer将比例设置为屏幕

PDFrenderer将比例设置为屏幕
EN

Stack Overflow用户
提问于 2016-09-17 17:11:10
回答 1查看 3.9K关注 0票数 0

我正在使用下面的代码来渲染一个pdf。这是一个try/catch,运行良好,显示了pdf。

问题是pdf文件对屏幕来说太大了。有没有人知道如何缩小到合适的尺寸?

谢谢。

代码语言:javascript
复制
        imageView = (ImageView) findViewById(R.id.imagePDF);

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

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width12 = size.x;
        int height12 = size.y;

        Bitmap bitmap = Bitmap.createBitmap(width12, height12, Bitmap.Config.ARGB_4444);

        File file = new File("/sdcard/Download/sample.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();
        }

        int pages;

        pages = renderer.getPageCount();

        Matrix m = imageView.getImageMatrix();

        Rect rect = new Rect(0, 0, width12, height12);

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

        imageView.setImageMatrix(m);
        imageView.setImageBitmap(bitmap);
        imageView.invalidate();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-17 19:36:46

您需要创建一个与页面的纵横比匹配的位图。最好也匹配ImageView的尺寸:

代码语言:javascript
复制
                PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY));
                PdfRenderer.Page page = renderer.openPage(0);
                int pageWidth = page.getWidth();
                int pageHeight = page.getHeight();
                float scale = Math.min((float) REQ_WIDTH / pageWidth, (float) REQ_HEIGHT / pageHeight);
                Bitmap bitmap = Bitmap.createBitmap((int) (pageWidth * scale), (int) (pageHeight * scale), Bitmap.Config.ARGB_8888);
                page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
                imageView.setImageBitmap(bitmap);

编辑:

为了避免ImageView的宽度和高度为0,一种解决方案是发布一个包含以下代码的Runnable:

代码语言:javascript
复制
imageView.post(new Runnable() {
    public void run() {
        // The above code goes here
    }
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39545009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档