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的問題。🙄 

  還是十分感謝同學提供的思路。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM