Android PDFRender设置屏幕比例

Android PDFRender设置屏幕比例,android,pdfrenderer,Android,Pdfrenderer,我正在使用下面的代码呈现pdf。这是一个try/catch,工作良好,显示pdf 问题是pdf文件对于屏幕来说太大了。有人知道如何缩小尺寸以适合自己吗 多谢各位 imageView = (ImageView) findViewById(R.id.imagePDF); int REQ_WIDTH = imageView.getWidth(); int REQ_HEIGHT = imageView.getHeight(); Disp

我正在使用下面的代码呈现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=(imageView)findviewbyd(R.id.imagePDF);
int REQ_WIDTH=imageView.getWidth();
int REQ_HEIGHT=imageView.getHeight();
Display Display=getWindowManager().getDefaultDisplay();
点大小=新点();
display.getSize(size);
int width12=大小.x;
内部高度12=尺寸y;
位图Bitmap=Bitmap.createBitmap(宽度12,高度12,Bitmap.Config.ARGB_4444);
File File=新文件(“/sdcard/Download/sample.pdf”);
PdfRenderer renderer=newpdfrenderer(ParcelFileDescriptor.open(文件,ParcelFileDescriptor.MODE_只读));
如果(当前页面<0){
currentPage=0;
}else if(currentPage>renderer.getPageCount()){
currentPage=renderer.getPageCount();
}
整版;
pages=renderer.getPageCount();
矩阵m=imageView.getImageMatrix();
Rect Rect=新的Rect(0,0,宽度12,高度12);
renderer.openPage(currentPage).render(位图、rect、m、PdfRenderer.Page.render_模式_用于_显示);
imageView.setImageMatrix(m);
设置图像位图(位图);
imageView.invalidate();

您需要创建与页面纵横比匹配的位图。最好也匹配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
    }
});

您需要创建与页面的纵横比匹配的位图。最好也匹配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
    }
});

ImageView.setScaleType(内部居中)ImageView.setScaleType(内部ImageView.ScaleType.CENTER);Rect和矩阵是可选的。如果两个都传递null会发生什么?这已经将宽度设置为屏幕大小,所以谢谢你,这太好了!你知道我怎样才能保持比例吗。这挤压了宽度,我现在需要挤压高度。我希望这是有意义的?我相信我需要找出pdf文件的原始尺寸,然后将其缩小以告知位图宽度和高度的尺寸imageView.setScaleType(内部居中)imageView.setScaleType(内部为imageView.ScaleType.CENTER_);Rect和矩阵是可选的。如果两个都传递null会发生什么?这已经将宽度设置为屏幕大小,所以谢谢你,这太好了!你知道我怎样才能保持比例吗。这挤压了宽度,我现在需要挤压高度。我希望这是有意义的?我相信我需要找出pdf文件的原始尺寸,然后缩小尺寸,以告知位图宽度和高度的尺寸这看起来应该可以工作,但出于某种原因,REQ_宽度和REQ_高度值为0?09-17 12:02:54.597 2358-2358/?带输入事件接收器﹕ 试图完成输入事件,但输入事件接收器已被释放。09-17 12:02:54.758 2358-2358/? W/System.err﹕ java.lang.IllegalArgumentException:宽度和高度必须大于0您的ImageView还不能完全膨胀。Try:imageView.post(new Runnable(){public void run(){/*您的代码*/}});这看起来应该可以工作,但由于某些原因,REQ_宽度和REQ_高度值为0?09-17 12:02:54.597 2358-2358/?带输入事件接收器﹕ 试图完成输入事件,但输入事件接收器已被释放。09-17 12:02:54.758 2358-2358/? W/System.err﹕ java.lang.IllegalArgumentException:宽度和高度必须大于0您的ImageView还不能完全膨胀。Try:imageView.post(new Runnable(){public void run(){/*您的代码*/}});