【问题标题】:PDFrenderer setting scale to screenPDFrenderer 将比例设置为屏幕
【发布时间】:2016-09-17 20:09:47
【问题描述】:

我正在使用下面的代码来呈现 pdf。这是一个 try/catch 并且运行良好,显示 pdf。

问题是 pdf 文件对于屏幕来说太大了。有谁知道如何缩小它以适应吗?

谢谢。

        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();

【问题讨论】:

  • ImageView.setScaleType (CENTER_INSIDE)
  • imageView.setScaleType (ImageView.ScaleType.CENTER_INSIDE);
  • 矩形和矩阵是可选的。如果两者都传递 null 会发生什么?
  • 这已将宽度设置为屏幕尺寸,非常感谢!你知道我怎么能保持比例吗?这已经挤压了宽度,我现在需要挤压高度。我希望这有意义吗?
  • 我相信我需要以某种方式找出 pdf 文件的原始尺寸,然后按比例缩小以告知位图宽度和高度的尺寸

标签: android pdfrenderer


【解决方案1】:

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

                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:

imageView.post(new Runnable() {
    public void run() {
        // The above code goes here
    }
});

【讨论】:

  • 这看起来应该可以工作,但由于某种原因,REQ_WIDTH 和 REQ_HEIGHT 值为 0?
  • 09-17 12:02:54.597 2358-2358/? W/InputEventReceiver:尝试完成输入事件,但输入事件接收器已被释放。 09-17 12:02:54.758 2358-2358/? W/System.err:java.lang.IllegalArgumentException:宽度和高度必须> 0
  • 您的 ImageView 还不能完全充气。试试:imageView.post(new Runnable() {public void run() {/*你的代码*/}});
猜你喜欢
  • 2021-10-12
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2015-12-12
  • 2013-03-29
  • 1970-01-01
  • 2012-03-27
相关资源
最近更新 更多