Android 查看PDF 部分文字无法显示 放大PDF再转图片BitMap

  一系列百度之后的结果,得到的解决方法 AndroidPdfViewer,PDF.js ...去显示PDF。

AndroidPdfViewer 

  AndroidPdfViewer 很多博客指出他的缺点是使APK增大,其实不在我考虑范围。只要能实现┭┮﹏┭┮  (好没出息的样子)

但我是遇到了致命的问题,AndroidPdfViewer 是 jcenter 库中的,我的Android项目不允许我使用 jcenter。于是放弃了

 

PDF.js

  参考博文:https://blog.csdn.net/taoyuxin1314/article/details/97004996

 

⭐ 注意这里有些版本用的是PDFJS

 使用这种方式我也完美的展现了PDF,但是很快我遇到了问题

 

PDF文件后期通过程序对PDF编辑插入的文字无法显示

于是我开始了解决问题之旅···

1、查看未显示出来的问题与其他文字区别。(该文字通过PDF直接编辑插入)

2、通过WPS插入文件,查看是否能够正常显示。(结果:插入的文字能够显示,中文无法显示,但如果对插入的文字进行修改字体,将无法显示,即使把字体修改回去,再也无法显示)

3、尝试更换PDF.js 的版本 

  参考博文:https://unpkg.com/browse/pdfjs-dist@2.3.200/

  更换多个版本之后并不能解决问题,并且有些高版本可能连PDF都加载不出来,可能是版本不同相应的 pdf.js 需要配置的内容不同。没再做进一步的研究

4、从字体方面去解决问题。在网上有找到说是字体有关的问题,于是我尝试用程序去编辑PDF插入文字,去查看是否能够正常显示。因为这里和实际他们PDF文件插入的字体以及encoding有差异,我插入的文字是能继续显示的。

5、难道再返回去修改成AndroidPdfViewer的形式?毕竟很多其他同学都是用这种展现形式,我如果直接使用AndroidPdfViewerjar包的话,是不是就不受 jcenter 库的限制。(但是我并没有找到···对应的jar包)

6、在我花了这么长时间,最终同学给了我新的思路。把PDF文件保存成图片呢?我确实没有考虑到,我想这种方式对我来说应该是实用的,但对于要显示多页PDF以及一些PDF基本操作的人,可能未必会适用。但确切地解决了我的问题。

  PDF转图片(Bitmap)代码如下:(由于加载的是在线PDF,还是选择先把PDF下载了下来)

  参考博文:https://blog.csdn.net/chaogelilun/article/details/85095821

没错,我通过这种方式实现了那部分文字的显示!然而我遇到了新的问题,我是把图片放在Photoview里面支持放缩,当放大图片上面的文字很模糊。而PDF.js的加载PDF放大之后是清楚的。

  于是我又代码切换到PDF.js的上去考虑,放大缩小放大缩小。然后我想,如果我把PDF放大再把大转成图片,转成一个大图,这样原先的图放大到大图就不会出现模糊的现象。

 

该怎么把PDF放大后转图?

  百度上我并未找到答案。

  于是我开始通过修改代码中有关的宽高参数,得到了一些不同的效果。

  最终代码如下:(红色标注为处理部分)

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    private Bitmap pdfToBitmap(File pdfFile) {

        Bitmap bitmap = null;
        try {
            PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY));

            final int pageCount = renderer.getPageCount();
            for (int i = 0; i < pageCount; i++) {
                PdfRenderer.Page page = renderer.openPage(i);

//                int width = getResources().getDisplayMetrics().densityDpi / 72 * page.getWidth();
//                int height = getResources().getDisplayMetrics().densityDpi / 72 * page.getHeight();
                int width = page.getWidth()*2;
                int height = page.getHeight()*2;
                Log.e("----------widht", width + "");
                Log.e("----------height", height + "");
                
                bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
                canvas.drawColor(Color.WHITE);
                Paint paint = new Paint();
                paint.setColor(Color.BLACK);
                canvas.drawBitmap(bitmap, 0, 0, paint);
                Rect r = new Rect(0, 0, width, height);
                Matrix tranform = new Matrix();
                tranform.setScale(2,2);
                page.render(bitmap, r, tranform, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
                // close the page
                page.close();

            }
            // close the renderer
            renderer.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return bitmap;
    }

  终于,完美地解决了这个PDF的问题。🙄

 

posted @ 2021-09-08 10:39  茄子鱼  阅读(948)  评论(0编辑  收藏  举报