| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- package com.example.chemical.utils
- import android.graphics.*
- import android.util.Log
- import com.example.chemical.ui.PrintBean
- import com.google.zxing.BarcodeFormat
- import com.google.zxing.EncodeHintType
- import com.google.zxing.MultiFormatWriter
- import com.google.zxing.WriterException
- import com.rc.core.log.RcLog
- object BitmapUtils {
- fun generateBitmap(printDate: PrintBean): Bitmap? {
- // 设置画布尺寸
- val width = 400
- val height = 400 // 225 * 3,每行占 225 的高度
- // 创建 Bitmap
- val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
- // 创建 Canvas
- val canvas = Canvas(bitmap)
- // 设置背景色
- canvas.drawColor(Color.WHITE)
- // 居中绘制二维码
- val qrCodeSize = 225
- val qrCodeX = (width - qrCodeSize) / 2
- val qrCodeY = 0
- drawQRCode(printDate.wxCode, canvas, qrCodeX, qrCodeY, 230)
- // 在二维码下方居中绘制文本
- val text = "编码:${printDate.tag}"
- val textX = (width - getTextWidth(text, 20)) / 2
- val textY = qrCodeY + qrCodeSize - 6
- drawText(canvas, text, textX, textY.toFloat(), 19)
- // 计算剩余内容的起始 Y 坐标
- val contentStartY = textY + 30
- // 绘制剩余的内容,左对齐显示
- val content = listOf(
- "${printDate.level} 一 ${printDate.name}",
- "CAS:${printDate.casNo} ${printDate.types}",
- "归属人:${printDate.person}",
- )
- val lineHeight = 24
- content.forEachIndexed { index, line ->
- drawText(canvas, line, 10f, contentStartY + index * lineHeight.toFloat(), 20)
- }
- return bitmap
- }
- fun generateBitmap(isBelong: Boolean, printDate: PrintBean): Bitmap? {
- // 设置画布尺寸
- val width = 400
- val height = 400 // 225 * 3,每行占 225 的高度
- // 创建 Bitmap
- val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
- // 创建 Canvas
- val canvas = Canvas(bitmap)
- // 设置背景色
- canvas.drawColor(Color.WHITE)
- // 居中绘制二维码
- val qrCodeSize = 225
- val qrCodeX = (width - qrCodeSize) / 2
- val qrCodeY = 0
- drawQRCode(printDate.wxCode, canvas, qrCodeX, qrCodeY, 230)
- // 在二维码下方居中绘制文本
- val text = "编码:${printDate.tag}"
- val textX = (width - getTextWidth(text, 20)) / 2
- val textY = qrCodeY + qrCodeSize - 6
- drawText(canvas, text, textX, textY.toFloat(), 19)
- // 计算剩余内容的起始 Y 坐标
- val contentStartY = textY + 30
- // 绘制剩余的内容,左对齐显示
- val string: String = if (isBelong) {
- "归属人:${printDate.person} "
- } else {
- "课题组:${printDate.person} "
- }
- val content = listOf(
- "${printDate.level} 一 ${printDate.name}",
- "CAS:${printDate.casNo} ${printDate.types}",
- string,
- )
- val lineHeight = 24
- content.forEachIndexed { index, line ->
- drawText(canvas, line, 10f, contentStartY + index * lineHeight.toFloat(), 20)
- }
- return bitmap
- }
- //编码 生成二维码
- private fun drawQRCode(tag: String, canvas: Canvas, x: Int, y: Int, size: Int) {
- val multiFormatWriter = MultiFormatWriter()
- try {
- val bitMatrix = multiFormatWriter.encode(
- "$tag", // 你想要生成二维码的内容
- BarcodeFormat.QR_CODE,
- size,
- size,
- hashMapOf(EncodeHintType.CHARACTER_SET to "UTF-8")
- )
- val width = bitMatrix.width
- val height = bitMatrix.height
- val pixels = IntArray(width * height)
- for (y in 0 until height) {
- val offset = y * width
- for (x in 0 until width) {
- pixels[offset + x] = if (bitMatrix.get(x, y)) Color.BLACK else Color.WHITE
- }
- }
- val qrCodeBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
- qrCodeBitmap.setPixels(pixels, 0, width, 0, 0, width, height)
- canvas.drawBitmap(qrCodeBitmap, x.toFloat(), y.toFloat(), null)
- } catch (e: WriterException) {
- Log.e("BitmapUtils", "Failed to generate QR code: ${e.message}")
- }
- }
- private fun drawText(canvas: Canvas, text: String, x: Float, y: Float, textSize: Int) {
- val paint = Paint(Paint.ANTI_ALIAS_FLAG)
- paint.color = Color.BLACK
- paint.textSize = textSize.toFloat()
- paint.typeface = Typeface.create(Typeface.DEFAULT, Typeface.NORMAL)
- canvas.drawText(text, x, y, paint)
- }
- private fun getTextWidth(text: String, textSize: Int): Float {
- val paint = Paint(Paint.ANTI_ALIAS_FLAG)
- paint.textSize = textSize.toFloat()
- return paint.measureText(text)
- }
- //气瓶信息打印
- fun airBottlePrint(rfid: String): Bitmap? {
- // 设置画布尺寸
- val width = 400
- val height = 400 // 225 * 3,每行占 225 的高度
- // 创建 Bitmap
- val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
- // 创建 Canvas
- val canvas = Canvas(bitmap)
- // 设置背景色
- canvas.drawColor(Color.WHITE)
- // 居中绘制二维码
- val qrCodeSize = 225
- val qrCodeX = (width - qrCodeSize) / 2
- RcLog.info("======二维码剧中数据$qrCodeX")
- val qrCodeY = 6
- drawQRCode(rfid, canvas, qrCodeX, qrCodeY, 230)
- // 在二维码下方居中绘制文本
- val text = "" +
- "$rfid"
- val textX = (width - getTextWidth(text, 20)) / 2
- val textY = qrCodeY + qrCodeSize - 6
- drawText(canvas, text, textX, textY.toFloat(), 19)
- // 计算剩余内容的起始 Y 坐标
- val contentStartY = textY + 30
- // 绘制剩余的内容,左对齐显示
- val content = listOf(
- "",
- "",
- "",
- )
- val lineHeight = 24
- content.forEachIndexed { index, line ->
- drawText(canvas, line, 10f, contentStartY + index * lineHeight.toFloat(), 20)
- }
- return bitmap
- }
- }
|