在android studio中转换为pdf时,LayerDrawable图像没有完全渲染

Muh*_*zan 7 android pdf-generation kotlin

我正在开发一个 android 应用程序,该应用程序使用过滤器对图像应用过滤器LayerDrawable并将这些图像保存到 pdf 文件,但问题在于,当我增加任何图像的尺寸时1000x1300,图像不会pdf在 .底部就像这张图片(将图片上传到 stackoverflow 时出现了一些问题,所以我必须使用这种方法)。

我使用setBounds()方法设置尺寸,以下是我用于将图像保存为 pdf 的代码(可能的问题来源被注释为//----->here lies the issue)。

   override fun doInBackground(vararg p0: Void?): String {
    // create a new document
    val document = PdfDocument()

    var numberOfPages = mainList.size / 10
    if (mainList.size % 10 != 0) {
        numberOfPages++
    }

    var count = 1
    var innerCounter = 1
    while (count <= numberOfPages) {
        // crate a page description
        val pageInfo: PdfDocument.PageInfo =
            PdfDocument.PageInfo.Builder(2480, 3508, count).create()
        // start of page creation
        val page: PdfDocument.Page = document.startPage(pageInfo)
        val canvas = page.canvas

        var currentIndex = 0
        while (innerCounter <= (count * 10)) {
            if (innerCounter - 1 < mainList.size) {
                val obj = mainList[innerCounter - 1]
                val filterBitmap =
                    BitmapFactory.decodeResource(context.resources, obj.frameID!!)
                val mCurrentFilter = BitmapDrawable(context.resources, filterBitmap)
                val imageBitmap = Bitmap.createScaledBitmap(
                    MediaStore.Images.Media.getBitmap(
                        context.contentResolver,
                        obj.imageURI!!
                    ), 1600, 1000, false
                )

                val mCurrentImage = BitmapDrawable(context.resources, imageBitmap)
                val layerArray = arrayOfNulls<Drawable>(2)
                layerArray[0] = mCurrentImage
                layerArray[1] = mCurrentFilter
                val layerDrawable = LayerDrawable(layerArray)

                val width = layerDrawable.intrinsicWidth
                val height = layerDrawable.intrinsicHeight
                if (isLandscape && isA4) {
                    when (currentIndex) {
                        0 -> {
                            layerDrawable.setBounds(0, 0, width, height)
                        }
                        3 -> {
                            layerDrawable.setBounds(0, 0, width, height)
                        }
                        else -> {
                            layerDrawable.setBounds(0, 0, 800, 500)
                        }
                    }
                } else if (!isLandscape && isA4) {
                    when (currentIndex) {
                        0 -> {
                            layerDrawable.setBounds(
                                0,
                                0,
                                1000,
                                1300
                            ) //----->here lies the issue
                        }
                        1 -> {
                            layerDrawable.setBounds(0, 0, 500, 900)
                        }
                        2 -> {
                            layerDrawable.setBounds(0, 0, 500, 900)
                        }
                        3 -> {
                            layerDrawable.setBounds(0, 0, 500, 900)
                        }
                        4 -> {
                            layerDrawable.setBounds(0, 0, 500, 900)
                        }
                        else -> {
                            layerDrawable.setBounds(0, 0, 800, 500)
                        }
                    }
                }
                val b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
                layerDrawable.draw(Canvas(b))
                val paint = Paint()
                if (isLandscape && isA4) {
                    when (currentIndex) {
                        0 -> {
                            canvas.drawBitmap(b, 30f, 200f, paint)
                        }
                        1 -> {
                            canvas.drawBitmap(b, 1650f, 200f, paint)
                        }
                        2 -> {
                            canvas.drawBitmap(b, 1650f, 700f, paint)
                        }
                        3 -> {
                            canvas.drawBitmap(b, 850f, 1210f, paint)
                        }
                        4 -> {
                            canvas.drawBitmap(b, 30f, 1210f, paint)
                        }
                        5 -> {
                            canvas.drawBitmap(b, 30f, 1710f, paint)
                        }
                        6 -> {
                            canvas.drawBitmap(b, 400f, 2260f, paint)
                        }
                        7 -> {
                            canvas.drawBitmap(b, 1250f, 2260f, paint)
                        }
                        8 -> {
                            canvas.drawBitmap(b, 400f, 2800f, paint)
                        }
                        9 -> {
                            canvas.drawBitmap(b, 1250f, 2800f, paint)
                        }
                    }
                } else if (!isLandscape && isA4) {
                    when (currentIndex) {
                        0 -> {
                            canvas.drawBitmap(b, 30f, 30f, paint)
                        }
                        1 -> {
                            canvas.drawBitmap(b, 1050f, 20f, paint)
                        }
                        2 -> {
                            canvas.drawBitmap(b, 1550f, 20f, paint)
                        }
                        3 -> {
                            canvas.drawBitmap(b, 1050f, 650f, paint)
                        }
                        4 -> {
                            canvas.drawBitmap(b, 1550f, 650f, paint)
                        }
                        5 -> {
                            canvas.drawBitmap(b, 30f, 1710f, paint)
                        }
                        6 -> {
                            canvas.drawBitmap(b, 400f, 2260f, paint)
                        }
                        7 -> {
                            canvas.drawBitmap(b, 1250f, 2260f, paint)
                        }
                        8 -> {
                            canvas.drawBitmap(b, 400f, 2800f, paint)
                        }
                        9 -> {
                            canvas.drawBitmap(b, 1250f, 2800f, paint)
                        }
                    }
                }
                innerCounter++
                currentIndex++
            } else {
                break
            }
        }
        document.finishPage(page)
        //end of page creation
        count++
    }

    // saving pdf to storage
    val directory_path = Environment.getExternalStorageDirectory().getPath() + "/mypdf/"
    val file = File(directory_path)
    if (!file.exists()) {
        file.mkdirs()
    }
    val targetPdf = directory_path + "test-2.pdf"
    val filePath = File(targetPdf)
    try {
        document.writeTo(FileOutputStream(filePath))
    } catch (e: IOException) {
        Log.e("main", "error " + e.toString())
        return e.toString()
    }

    // close the document
    document.close()
    return "Done"
}
Run Code Online (Sandbox Code Playgroud)