package com.base.scanqrclear.utils

import android.graphics.Bitmap
import android.graphics.Color
import android.graphics.Paint
import android.graphics.pdf.PdfDocument
import java.io.File
import java.io.FileOutputStream

object ExportPdf {


    fun generatePdfWithTextAndImage(
        file: File,
        bitmap: Bitmap,
        qrType: String,
        qrStrings: Array<String>,
        imageYRate: Float//图片水平位置比例，2水平居中，小于2偏下，大于2偏上
    ): Boolean {
        // A4纸张大小（单位：点，1英寸=72点）
        val pageWidth = 595
        val pageHeight = 842

        val pdfDocument = PdfDocument()
        val pageInfo = PdfDocument.PageInfo.Builder(pageWidth, pageHeight, 1).create()
        val page = pdfDocument.startPage(pageInfo)
        val canvas = page.canvas

        val imageWidth = bitmap.width
        val imageHeight = bitmap.height

        // 计算图片的绘制位置（水平和垂直居中）
        val imageX = (pageWidth - imageWidth) / 2f
        val imageY = (pageHeight - imageHeight) / imageYRate

        // 绘制图片
        canvas.drawBitmap(bitmap, imageX, imageY, null)


        // 绘制文本和图片
        val paint = Paint()
        paint.color = Color.BLACK
        paint.textSize = 25f // 设置文本大小
        paint.textAlign = Paint.Align.CENTER // 文本居中对齐

        //文本距离图片间隔
        val textVerticalMargin = 30f

        // 计算顶部文本的绘制位置
        val textTopY = imageY - textVerticalMargin - paint.descent() // 图片上方50点
        canvas.drawText(qrType, pageWidth / 2f, textTopY, paint)

        // 计算底部文本的绘制位置
        var currentY = imageY + imageHeight + textVerticalMargin // 图片下方起始位置
        val lineHeight = paint.textSize + 10f // 行高（文本大小 + 间距）

        // 遍历字符串数组，逐行绘制
        for (line in qrStrings) {
            canvas.drawText(line, pageWidth / 2f, currentY - paint.descent(), paint)
            currentY += lineHeight // 更新下一行的垂直位置
        }

        // 完成页面绘制
        pdfDocument.finishPage(page)

        try {
            val outputStream = FileOutputStream(file)
            pdfDocument.writeTo(outputStream)
            pdfDocument.close()
            outputStream.close()

            return true
        } catch (e: Exception) {

        }

        return false

    }
}