From 4c829f74a9cfb11a9da791e3c82ccd78db7d6958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=89=E7=A7=8B?= <497055328@qq.com> Date: Sat, 22 Aug 2026 09:17:27 +0800 Subject: [PATCH] fix: accept RX1 encoded BMP dimensions --- app/build.gradle.kts | 4 +- .../com/yzx/kiosk/priter/PrinterService.kt | 55 ++++++++++++------- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f62bbf2..20fea4d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -89,8 +89,8 @@ android { applicationId = "com.yzx.kiosk" minSdk = 26 targetSdk = 36 - versionCode = 22 - versionName = "1.1.2" + versionCode = 23 + versionName = "1.1.3" //multiDexEnabled = true testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/yzx/kiosk/priter/PrinterService.kt b/app/src/main/java/com/yzx/kiosk/priter/PrinterService.kt index 807b08f..caf98e0 100644 --- a/app/src/main/java/com/yzx/kiosk/priter/PrinterService.kt +++ b/app/src/main/java/com/yzx/kiosk/priter/PrinterService.kt @@ -20,11 +20,11 @@ import jp.co.dnpLib.print.PrintJob import jp.co.dnpLib.print.PrintJobStatus import jp.co.dnpLib.print.PrintManager import jp.co.dnpLib.print.PrintQueue -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock -import kotlinx.coroutines.withContext +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext import java.io.File import java.io.IOException import javax.inject.Singleton @@ -42,10 +42,15 @@ class PrinterService( ) { companion object { private const val TAG = "PrinterService" + + // DNP BmpUtil 在 300 DPI 下会将 RX1 输入画布编码为 1844x1240 BMP。 + // 1840x1240 仍是上层排版画布尺寸,不应用它校验 SDK 的最终文件头。 + private const val RX1_ENCODED_BMP_WIDTH_300_DPI = 1844 + private const val RX1_ENCODED_BMP_HEIGHT_300_DPI = 1240 } - private var mDnpPhotoPrint: DNPPhotoPrint? = null - private val printMutex = Mutex() + private var mDnpPhotoPrint: DNPPhotoPrint? = null + private val printMutex = Mutex() /** * 初始化打印机(耗时操作,需在IO线程调用) @@ -185,14 +190,14 @@ class PrinterService( * @param originalBitmap 要打印的原始图片 * @param callback 打印结果回调 */ - suspend fun startPrint(originalBitmap: Bitmap?, callback: PrintCallback) = printMutex.withLock { - startPrintInternal(originalBitmap, callback) - } - - private suspend fun startPrintInternal( - originalBitmap: Bitmap?, - callback: PrintCallback - ) = withContext(Dispatchers.IO) { + suspend fun startPrint(originalBitmap: Bitmap?, callback: PrintCallback) = printMutex.withLock { + startPrintInternal(originalBitmap, callback) + } + + private suspend fun startPrintInternal( + originalBitmap: Bitmap?, + callback: PrintCallback + ) = withContext(Dispatchers.IO) { if (originalBitmap == null) { LogUtils.e(TAG, "获取图片失败") callback.onPrintResult(false,"获取图片失败") @@ -274,10 +279,20 @@ class PrinterService( throw IOException("BMP 保存接口返回失败") } + val expectedBmpWidth: Int + val expectedBmpHeight: Int + if (printId != PrintManager.EPrinter.QW410_DEF.id) { + expectedBmpWidth = RX1_ENCODED_BMP_WIDTH_300_DPI + expectedBmpHeight = RX1_ENCODED_BMP_HEIGHT_300_DPI + } else { + expectedBmpWidth = printSize.width + expectedBmpHeight = printSize.height + } + val validation = PrintImageIntegrityValidator.validateBmp( file = outFile, - expectedWidth = printSize.width, - expectedHeight = printSize.height + expectedWidth = expectedBmpWidth, + expectedHeight = expectedBmpHeight ) LogUtils.d( TAG, @@ -348,9 +363,9 @@ class PrinterService( // 打印失败,设置为空闲 printStatusManager.setIdle() callback.onPrintResult(false,"打印失败: ${e.message}") - } - } -} + } + } +} /** * 打印结果回调接口