使用 iText5 将受密码保护的 PDF 转换为图像

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

我想获取所有图像格式的PDF页面,可以使用

PdfRenderer
,但我无法用它输入PDF密码。

我可以从 PDFReader 获取 PDF 页面的图像吗?

这是我的代码

 private void pdfToImage(Uri pdfFilePath, String password) { //password is input,which is given by user

        try {
            // Reading pdf in READ Only mode.
//        ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.open(new File(pdfFilePath.getPath()), ParcelFileDescriptor.MODE_READ_ONLY);
            ParcelFileDescriptor fileDescriptor = getContentResolver().openFileDescriptor(pdfFilePath, "r");
            
            // Initializing PDFRenderer object.
            PdfRenderer renderer = new PdfRenderer(fileDescriptor);

            // Getting total pages count.
            final int pageCount = renderer.getPageCount();

            // Iterating pages
            for (int i = 0; i < pageCount; i++) {

                // Getting Page object by opening page.
                PdfRenderer.Page page = renderer.openPage(i);

                // Creating empty bitmap. Bitmap.Config can be changed.
                Bitmap bitmap = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Bitmap.Config.ARGB_8888);

                // Creating Canvas from bitmap.
                Canvas canvas = new Canvas(bitmap);

                // Set White background color.
                canvas.drawColor(Color.WHITE);

                // Draw bitmap.
                canvas.drawBitmap(bitmap, 0, 0, null);

                // Rednder bitmap and can change mode too.
                page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

                // closing page
                page.close();


                // saving image into sdcard.
                File file = getImageFile();

                // Saving image in PNG format with 100% quality.
                FileOutputStream out = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                Log.v("Saved Image - ", file.getAbsolutePath());
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
java android pdf itext
1个回答
0
投票

花了两天时间终于找到了一个将pdf页面转换为位图的解决方案,我知道为时已晚,但它可以帮助别人,在这里我分享一些代码

通过使用这个

  1. 首先在build.gradle中添加以下gradle依赖

    实现“com.github.barteksc:android-pdf-viewer:2.8.2”

  2. 然后你可以使用以下函数,它将返回位图列表

     fun mGetBitmapFromPasswordProtected(file: Uri?,password : String): ArrayList<Bitmap>? {
    
     val bitmaps = ArrayList<Bitmap>()
    
     var pageNum=0
    
     val pdfiumCore = PdfiumCore(this@PDFToImages)
     try {
         val pdfDocument = pdfiumCore.newDocument(
             contentResolver.openFileDescriptor(
                 file!!, "r"
             ), password
         )
    
    
         do {
             pdfiumCore.openPage(pdfDocument, pageNum)
             val width = pdfiumCore.getPageWidthPoint(pdfDocument, pageNum)
             val height = pdfiumCore.getPageHeightPoint(pdfDocument, pageNum)
             val bitmap = Bitmap.createBitmap(
                 width, height,
                 Bitmap.Config.RGB_565
             )
             pdfiumCore.renderPageBitmap(
                 pdfDocument, bitmap, pageNum, 0, 0,
                 width, height
             )
    
             bitmaps.add(bitmap)
             pageNum++
         }
         while (pdfDocument.hasPage(pageNum))
    
    
         pdfiumCore.closeDocument(pdfDocument)
    
         return bitmaps
     }
     catch (ex: Exception) {
         ex.printStackTrace()
     }
     return null
    

    }

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