我将 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();
}
这是我用来将页面转换为位图的代码
如何以原始尺寸渲染页面并具有良好的位图质量
将它们渲染为位图时,选择任意因子来缩放它们。
例如将 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);
帮助改善外观