package com.dpkj.modules.autoReplyPrint.base; import com.dpkj.common.exception.RRException; import com.dpkj.modules.autoReplyPrint.utils.AutoReplyPrint; import com.dpkj.modules.autoReplyPrint.utils.ImageUtils; import com.sun.jna.Pointer; import org.springframework.web.multipart.MultipartFile; /** * 图片打印基础实现 * * @author 石头人 * @version 1.0 * @since 2025-01-17 14:37:23 */ public abstract class BaseImagePrint { /** * 必须要实现这个,获取句柄 * @param devName 设备名称/串口名称 * @return 窗口句柄 */ public abstract Pointer getHandle(String devName); public void printFromPath(String devName, int dstw, int dsth, String pszFile, int binaryzation_method, int compression_method) { Pointer handle = getHandle(devName); try { // 开始打印图片 boolean printTag = AutoReplyPrint.INSTANCE.CP_Pos_PrintRasterImageFromFile(handle, dstw, dsth, pszFile, binaryzation_method, compression_method); if( !printTag ){ throw new RRException("打印图片失败"); } // 切纸 AutoReplyPrint.INSTANCE.CP_BlackMark_SetBlackMarkPaperCutPosition(handle, 0); boolean cutPaper = AutoReplyPrint.INSTANCE.CP_Pos_FeedAndHalfCutPaper(handle); if ( !cutPaper){ throw new RRException("图片裁剪失败,请自行裁剪"); } }catch (Exception e){ e.printStackTrace(); throw new RRException(e); }finally { if ( handle != null) AutoReplyPrint.INSTANCE.CP_Port_Close(handle); } } public void printFromPathData(String devName, int dstw, int dsth, String pszFile, int binaryzation_method, int compression_method) { // 获取图片 byte[] data = ImageUtils.imageToBytes(pszFile); this.printFromData(devName, dstw, dsth, data, binaryzation_method, compression_method); } public void printFromData(String devName, int dstw, int dsth, byte[] data, int binaryzation_method, int compression_method) { Pointer handle = getHandle(devName); try { // 开始打印图片 boolean printTag = AutoReplyPrint.INSTANCE.CP_Pos_PrintRasterImageFromData(handle, dstw, dsth, data, data.length, binaryzation_method, compression_method); if( !printTag ){ throw new RRException("打印图片失败"); } // 切纸 AutoReplyPrint.INSTANCE.CP_BlackMark_SetBlackMarkPaperCutPosition(handle, 0); boolean cutPaper = AutoReplyPrint.INSTANCE.CP_Pos_FeedAndHalfCutPaper(handle); if ( !cutPaper){ throw new RRException("图片裁剪失败,请自行裁剪"); } }catch (Exception e){ e.printStackTrace(); throw new RRException(e); }finally { if ( handle != null) AutoReplyPrint.INSTANCE.CP_Port_Close(handle); } } public void printFromMultipartFile(String devName, int dstw, int dsth, MultipartFile file, int binaryzation_method, int compression_method){ byte[] data = ImageUtils.getByteToMultipartFile(file); this.printFromData(devName, dstw, dsth, data, binaryzation_method, compression_method); } }