如何在 pdf 文件列表中显示 pdf 的缩略图,而在我的应用程序中没有任何延迟?

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

我需要在我的应用程序中的 pdf 文件回收器视图中显示每个 pdf 文件的缩略图。但是,当我使用 Glide 设置它时,用户界面变得锯齿状。我应该如何创建 PDF 文件第一页的图像?我应该如何存储该文件?请帮帮我,我对此一无所知。

用户界面如下所示:

这是我的代码:



    // binds the data to the ImageView in each cell
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        PidifyFile currentFile = files.get(position);


        // helper function that adds/removes an item to the list depending on the app's state

//        holder.pdfImg.setImageBitmap();
        holder.pdfName.setText(currentFile.getName());
        Date lModified = currentFile.getDateCreated();
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy hh:mm aa");
        holder.pdfDate.setText(sdf.format(lModified));
//        holder.pdfSize.setText(humanReadableByteCountSI(currentFile.length()));

        //using Glide for smooth loading of images in recycler view
//        Glide.with(holder.itemView.getContext())
//                .asBitmap()
//                .load(pdfToBitmap(new File(currentFile.getFilePath()), holder))
//                .into(holder.pdfImg);
    }



    private Bitmap pdfToBitmap(File pdfFile, ViewHolder holder) {
        Bitmap bitmap = null;
        try {
            PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY));
            final int pageCount = renderer.getPageCount();
            if (pageCount > 0) {
                PdfRenderer.Page page = renderer.openPage(0);
                int width = page.getWidth();
                int height = page.getHeight();

                bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

                String timeStamp = new SimpleDateFormat("ddMMyyyy").format(new Date());
                String path = pdfFile.getAbsolutePath() + timeStamp + ".jpg";
                imgFile = new File(path);
                FileOutputStream fos = new FileOutputStream(imgFile);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                fos.close();
                page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
                page.close();
                renderer.close();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            Log.e("error123", "Nahi ho paya");
        }
        return bitmap;
    }

   
java android bitmap android-glide
1个回答
0
投票

您是否尝试过使用 Picasso 而不是 Glide 来加载图像?我自己还没有测试过,但也许可以工作,像这样:

Picasso.get().load(new File(currentFile.getFilePath())).into(holder.pdfImg);
© www.soinside.com 2019 - 2024. All rights reserved.