uni-app原生打印插件开发
开发环境:android studio 3.5.1、HbuilderX、jdk1.7
官方文档:https://nativesupport.dcloud.net.cn/NativePlugin/course/android
一、下载官方示例
https://nativesupport.dcloud.net.cn/AppDocs/download/android
导入示例到AS中,并将uniapp示例工程源码拷贝到HbuilderX的工程目录中,引入HbuilderX
也可以自己在HbuilderX新建自己的页面,我这里是自己新建的页面,和官方有所不同
二、原生打印插件开发
新建一个模块,包名和官方相似
插件相关代码
public class PrinterModule extends WXModule {
private static final String TAG=PrinterModule.class.getName ();
private PrintUtil util;
public int number=1000000001; // 初始化票据流水号 Initial bill serial number
public String MARK_ENABLE="mark_enable";
// 字体
public String FONT_SIZE="font_size";
// 是否加粗
public String FONT_BOLD="font_bold";
// 浓度 25 - 39
public String FONT_LEVEl="font_level";
// 退纸距离
public String BACK_LENGTH="back_length";
// 编码格式 1、2
public String ENCODE="encode";
// 对齐方式
public String ALIGNMODE="align_mode";
// 空格
public String TAB_LENGTH="tab_length";
// 转行
public String LINE_LENGTH="line_length";
// 文本
public String TITLE="title";
public String CONTENT="content";
public String LEFT_TEXT="left_text";
public String CENTER_TEXT="center_text";
public String RIGHT_TEXT="right_text";
// 二维码
public String QR_TEXT="qr_text";
public String QR_HEIGHT="qr_height";
public String QR_WIDTH="qr_width";
// 条码
public String BARCODE_TEXT="barcode_text";
public String BARCODE_HEIGHT="barcode_height";
public String BARCODE_WIDTH="barcode_width";
// 图片
public String IMG_BASE64="img_base64";
@Override
public void onActivityResume() {
super.onActivityResume ();
}
@Override
public void onActivityCreate() {
super.onActivityCreate ();
Log.e (TAG, "onActivityCreate: ");
}
//run JS thread
@JSMethod(uiThread=false)
public JSONObject testSyncFunc() {
JSONObject data=new JSONObject ();
data.put ("code", "success");
return data;
}
@JSMethod(uiThread=false)
public JSONObject initPrinter() {
Log.e (TAG, "initPrinter: ");
JSONObject data=new JSONObject ();
try {
util=new PrintUtil ("GB2312");
util.setPrintEventListener (new PrintUtil.OnPrintEventListener () {
@Override
public void onPrintStatus(int state) {
number+=1; // 流水号自加1 Serial number plus 1
Map<String,Object> params=new HashMap<> ();
params.put("key",state);
mWXSDKInstance.fireGlobalEventCallback("myEvent", params);
}
@Override
public void onVersion(String s) {
Log.e (TAG, "onVersion: "+s);
}
});
} catch (IOException e) {
e.printStackTrace ();
data.put ("code", "error");
}
data.put ("code", "success");
return data;
}
@JSMethod(uiThread=false)
public void closePrinter() {
SerialManager.getClient ().close ();
}
@JSMethod(uiThread=false)
public void setFontSize(JSONObject options) {
try {
Integer fontSize=options.getInteger (FONT_SIZE);
Log.e (TAG, "setFontSize: "+fontSize);
if (fontSize == 0) {
util.printFontSize (MODE_ENLARGE.NORMAL);
} else if (fontSize == 1) {
util.printFontSize (MODE_ENLARGE.HEIGHT_DOUBLE);
} else if (fontSize == 2) {
util.printFontSize (MODE_ENLARGE.HEIGHT_WIDTH_DOUBLE);
}
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void setTextBold(JSONObject options) {
try {
boolean bold=options.getBoolean (FONT_BOLD);
Log.e (TAG, "setTextBold: "+bold);
util.printTextBold (bold);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void setConcentration(JSONObject options) {
try {
Integer level=options.getInteger (FONT_LEVEl);
Log.e (TAG, "setConcentration: "+level);
util.printConcentration (level);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void setBackPaper(JSONObject options) {
try {
Integer length=options.getInteger (BACK_LENGTH);
Log.e (TAG, "setBackPaper: "+length);
util.printBackPaper (length);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void setEncode(JSONObject options) {
try {
Integer encode=options.getInteger (ENCODE);
Log.e (TAG, "setEncode: "+encode);
if (encode == 1) {
util.printEncode (2);
} else if (encode == 2) {
util.printEncode (3);
}
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printEnableMark(JSONObject options){
try {
boolean enable = options.getBoolean (MARK_ENABLE);
util.printEnableMark (enable);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printGoToNextMark(){
try {
util.printGoToNextMark ();
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printAlignment(JSONObject options) {
try {
Integer mode=options.getInteger (ALIGNMODE);
Log.e (TAG, "printAlignment: "+mode);
if (mode == ALIGN_MODE.ALIGN_LEFT.Get ()) {
util.printAlignment (ALIGN_MODE.ALIGN_LEFT);
} else if (mode == ALIGN_MODE.ALIGN_CENTER.Get ()) {
util.printAlignment (ALIGN_MODE.ALIGN_CENTER);
} else if (mode == ALIGN_MODE.ALIGN_RIGHT.Get ()) {
util.printAlignment (ALIGN_MODE.ALIGN_RIGHT);
}
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printState() {
try {
util.printState ();
Thread.sleep (100);
} catch (IOException e) {
e.printStackTrace ();
} catch (InterruptedException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printStartNumber() {
try {
Log.e (TAG, "printStartNumber: ");
util.printStartNumber (number);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printEndNumber() {
try {
Log.e (TAG, "printEndNumber: ");
util.printEndNumber ();
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printFeatureList() {
try {
Log.e (TAG, "printFeatureList: ");
util.printFeatureList ();
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void resetPrint() {
try {
Log.e (TAG, "resetPrint: ");
util.resetPrint ();
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printTabSpace(JSONObject options) {
try {
Integer tabLength=options.getInteger (TAB_LENGTH);
Log.e (TAG, "printTabSpace: "+tabLength);
util.printTabSpace (tabLength);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printLine(JSONObject options) {
try {
Integer line_length=options.getInteger (LINE_LENGTH);
Log.e (TAG, "printLine: "+line_length);
util.printLine (line_length);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printDashLine() {
try {
Log.e (TAG, "printDashLine: ");
util.printDashLine ();
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printText(JSONObject options) {
try {
String content=options.getString (CONTENT);
Log.e (TAG, " content "+content);
util.printText (content);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printTwoColumn(JSONObject options) {
try {
String title=options.getString (TITLE);
String content=options.getString (CONTENT);
Log.e (TAG, "title: "+title+" content "+content);
util.printTwoColumn (title, content);
} catch (IOException e) {
e.printStackTrace ();
}
}
@JSMethod(uiThread=false)
public void printThreeColumn(JSONObject options) {
try {
String left_text=options.getString (LEFT_TEXT);
String center_text=options.getString (CENTER_TEXT);
String right_text=options.getString (RIGHT_TEXT);
Log.e (TAG, "left_text: "+left_text+" center_text "+center_text+" right_text "+right_text);
util.printThreeColumn (left_text, center_text, right_text);
} catch (IOException e) {
e.printStackTrace ();
}
}
/**
* 打印二维码
*
* @param options
*/
@JSMethod(uiThread=false)
public void printQR(JSONObject options) {
try {
Log.e (TAG, "printQR: ");
String text=options.getString (QR_TEXT);
Integer height=options.getInteger (QR_HEIGHT);
Integer width=options.getInteger (QR_WIDTH);
Log.e (TAG, "QR left_text: "+text+" center_text "+height+" right_text "+width);
util.printQR (text, height, width);
} catch (IOException e) {
e.printStackTrace ();
}
}
/**
* 打印条码
*/
@JSMethod(uiThread=false)
public void printBarcode(JSONObject options) {
try {
Log.e (TAG, "printBarcode: ");
String text=options.getString (BARCODE_TEXT);
Integer height=options.getInteger (BARCODE_HEIGHT);
Integer width=options.getInteger (BARCODE_WIDTH);
Log.e (TAG, "Barcode left_text: "+text+" center_text "+height+" right_text "+width);
util.printBarcode (text, height, width);
} catch (IOException e) {
e.printStackTrace ();
}
}
/**
* 打印图片
*/
@JSMethod(uiThread=false)
public void printBitmap(JSONObject options) {
try {
String base64=options.getString (IMG_BASE64);
byte[] decodedString=Base64.decode (base64.trim (), Base64.DEFAULT);
Bitmap bitmap=BitmapFactory.decodeByteArray (decodedString, 0, decodedString.length);
BitmapUtils.compressPic (bitmap,384,bitmap.getHeight ());
util.printBitmap (bitmap);
} catch (IOException e) {
e.printStackTrace ();
}
}
}
三、插件使用
1、使用AS将插件模块生成aar包,并在HbuilderX项目中新建nativeplugins
2、新建插件目录,所需资源全面放入,文件夹名称和package.json中定义的一样
3、package.json文件
{
"name": "LcPrinter",
"id": "LcPrinter",
"version": "1.0.0",
"description": "打印插件",
"_dp_type":"nativeplugin",
"_dp_nativeplugin":{
"android": {
"plugins": [
{
"type": "module",
"name": "LcPrinter",
"class": "uni.dcloud.io.uniplugin_lcprint.PrinterModule"
}
],
// "dependencies": [
// "printer_release_v1.0_3.aar"
// ],
"abis": [
"armeabi-v7a",
"arm64-v8a",
"x86"
],
"integrateType": "aar",
"minSdkVersion" : 15
}
}
}
4、上传插件市场操作请参考官网
5、页面引用
const printer = uni.requireNativePlugin('LcPrinter');
四、成品展示
项目示例:链接:https://pan.baidu.com/s/12n-q3CvUvA8WJ2VA4fftEg
提取码:hawl
uni-app原生打印插件开发相关推荐
- JS与APP原生控件交互
"热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...
- uni app map 地图 漂浮问题及方案
uni app map 地图 漂浮问题及方案 文章页有图片导致的问题,图片没加载出来,导致文章内容高度不固定,如果图片没加载出来,高度就是0,如果此时开始加载map,那么map就在那里加载,map原生 ...
- uni app 视频播放功能
视频播放功能,需求:编译成纯h5网页,运行在任意容器里,如浏览器.安卓原生和iOS等 媒体组件video 首先使用video组件,然后高度需要自己设置 uni.createVideoContext 官 ...
- 未配置appkey或配置错误,uniapp原生安卓插件开发
开发安卓原生插件 一.官方文档 1.https://nativesupport.dcloud.net.cn/NativePlugin/course/android 2.下载对应的SDK.工程文件 二. ...
- Android uni app 列表底部白条解决方案
uni app中android打开本地vue的列表会发现,底部有条白边. vue通过uni.getSystemInfoSync();方法获取系统信息,首次取值对,再次取值就出错 uni app每次启动 ...
- vant 验证手机号_【uni app】vant weapp的引入和部分详细调用(表单输入框、验证码、弹出层搭配选择器、地图)...
本次小程序的开发使用uni app+vant weapp,vant weapp如何引用和部分组件使用方法如下 引入 在github(https://github.com/youzan/vant-wea ...
- 切换 uniapp_万能前端框架uni app初探03:底部导航开发
前言 本节我们使用uni app的底部导航功能,点击不同tab会显示不同页面,这个功能在实际项目开发中几乎是必备的. 一.基础知识 1.tabBar 如果应用是一个多 tab 应用,可以通过 tabB ...
- 如何选择Web APP与Native App原生开发模式的区别(转)
APP开发模式通常分为Web APP与Native APP原生模式两种,这两种模式均各自有自己的优势,到底是采用Native App开发还是采用Web App开发一直是业界争论的焦点,但是随着HTML ...
- android没有界面app,Android离线打包 app处于原生界面 切换到桌面再点击app 原生界面被关闭...
Android离线打包环境, 当app打开原生界面时,点击Home键到桌面,然后点击桌面图标打开app,原生界面被关闭,无论原生界面层级多少,都是返回到io.dcloud.PandoraEntry这个 ...
最新文章
- 云优后台提交显示parsererror_【Shopee新手开店】卖家后台管理及设置
- 我国IPv6规模要达到世界第一
- linux中sh基本语法
- Java服务启动慢,JVM预热的问题,我在k8s上改进了
- 民主湖呀,不知道是好看还是破烂
- 开发留言本,学习笔记
- 动态更改屏幕方向LANDSCAPE与PORTRAIT 转
- 一次违反常规的Java大厂面试经历,重难点整理
- jQuery 源码系列(二)init 介绍
- RAR与ZIP区别,哪个比较好用!
- 新浪公司总裁兼首席执行官 曹国伟
- Eclipse 提示代码时弹出错误弹框问题
- 为什么越学反而越蠢?碎片化学习是个骗局
- Navicat Premium 12.1.15的激活
- 以太坊开发入门-ERC20合约
- 电磁波的穿透能力总结
- HC-SR505红外感应模块驱动(STM32)
- 2022年最新广东建筑安全员模拟题库及答案
- STM32实现四驱小车(五)电机控制任务——电机速度PID控制算法
- 学计算机编程学校河南,黄亚博-计算机与信息工程学院官网
热门文章
- android switch_dev
- E/InputDispatcher: channel '32d434a4 Toast (server)' ~ Channel is unrecoverably broken and will be d
- 论文的数据一般在哪里找?
- java操作word,添加页眉,页眉图片,替换书签,添加水印(全)
- 软件设计模式- 命令模式
- Qt之如何获取主窗口的指针
- 索引失效的10个原因
- 我的世界电脑版加模组JAVA,我的世界java版mod
- 应用罗尔定理的证明题总结含例题
- Python代码游戏————星球大战