将pdf页面转换为原始尺寸的位图

问题描述 投票:0回答:1

我将 pdf 页面转换为位图并在 recyclerview 中显示它们,但有一个问题,原始 pdf 位图的大小为 841*595,但如果渲染具有此大小的位图,则看起来太糟糕,因此我必须渲染它们 1920 *1080 但这会增加最终文件大小

 private void pdfToBitmaps(Uri pdfUri) {
        // Use a background thread to process the PDF
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.execute(() -> {
            try {
                ParcelFileDescriptor parcelFileDescriptor = getContentResolver().openFileDescriptor(pdfUri, "r");
                PdfRenderer renderer = new PdfRenderer(parcelFileDescriptor);
                int initailcount = renderer.getPageCount();

                if (parcelFileDescriptor != null && initailcount < 600) {
                    int pageCount = renderer.getPageCount();
                    Log.d("PdfToBitmaps", "Total pages: " + pageCount);

                    for (int i = 0; i < pageCount; i++) {
                        PdfRenderer.Page page = renderer.openPage(i);
                        Log.d("PdfToBitmaps", "Rendering page: " + i);
                       


                        Bitmap bitmap = Bitmap.createBitmap(1080, 1920, Bitmap.Config.ARGB_4444);
                        Canvas canvas = new Canvas(bitmap);
                        canvas.drawColor(Color.WHITE);
                        page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
                      
                        mlkitforembededtext(bitmap,i);
                        // Add bitmap to list and notify adapter
                        runOnUiThread(() -> {
                            pdfBitmaps.add(bitmap);
                            pdfAdapter.notifyItemInserted(pdfBitmaps.size() - 1);
                        });


       
                        page.close();
                    }
                    renderer.close();
}

这是我用来将页面转换为位图的代码

如何以原始尺寸渲染页面并具有良好的位图质量

android pdf android-recyclerview pdf-generation android-bitmap
1个回答
0
投票

将它们渲染为位图时,选择任意因子来缩放它们。

例如将 841595 渲染为 16281190,这是 2

的因数

当您显示它们时,将它们按比例因子的倒数缩小

例如比例因子为 1/2 (0.5)

您不会在recyclerview中显示位图的绘制,因此有多种方法可以在绘制时设置比例因子。

例如

canvas.scale(0.4,0.5);
canvas.drawBitmap(bitmap, left, top, paint);

Matrix scaleMatrix = new Matrix();
scaleMatrix.setScale(0.5);
canvas.drawBitmap(bitmap, scaleMatrix, paint);

或者有各种具有矩形大小的

canvas.drawBitmap
方法会导致它缩小位图

你也可以做

paint.setAntiAlias(true);

帮助改善外观

© www.soinside.com 2019 - 2024. All rights reserved.