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)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |