更新记录

1.0.0(2026-02-24)

初始版本发布


平台兼容性

uni-app(3.6.17)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS 鸿蒙
1.0.0 1.0.0 × × 1.0.0 1.0.0 5.0 1.0.0 × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × - × ×

UTS 手写签批插件调用文档

插件版本: v1.0 适用平台: Android (UTS)
最后更新: 2026-02-24
SDK 包名: uts.sdk.modules.zyhandwriting


1. 插件简介

本插件基于 Android 原生手写签批 SDK 封装,提供空白签批田字格签批两种模式,适用于电子签名、合同签署、手写输入、书法练习等场景。

演示

核心功能

方法 说明 适用场景
openBlank 空白画布签批 电子签名、合同签署、批注
openGrid 田字格画布签批 汉字书写、书法练习、生字练习

2. 快速开始

2.1 引入插件

import { openBlank, openGrid } from '@/uni_modules/zy-handwriting';

2.2 基础调用

// 空白签批
openBlank({
    success: (res) => {
        console.log('图片路径:', res.imagePath);
    }
});

// 田字格签批
openGrid({
    success: (res) => {
        console.log('图片路径:', res.imagePath);
    }
});

3. API 详细文档

3.1 空白签批 openBlank

方法签名

openBlank(options: OpenBlankOptions): void

参数说明

参数 类型 必填 默认值 说明
width Number 800 画布宽度 (像素)
height Number 800 画布高度 (像素)
background String "#FFFFFF" 画布背景色 (Hex 格式),也是最终生成图片的背景色
crop Boolean false 最终图片是否只截取文字区域(裁剪多余空白)
format String "PNG" 图片格式 ("PNG" / "JPG")
themeColor String "#e63f32" 主题颜色 (笔触/按钮/UI 颜色)
success Function - 成功回调,接收 { imagePath: string }
fail Function - 失败回调,接收错误对象
complete Function - 完成回调 (无论成功失败必执行)

返回值

成功回调接收 HandwritingResult 对象:

interface HandwritingResult {
    imagePath: string;  // 本地图片绝对路径
}

代码示例

openBlank({
    width: 1080,
    height: 800,
    background: "#FFFFFF",      // 白色背景
    crop: true,                 // 裁剪多余空白区域
    format: "PNG",
    themeColor: "#1890FF",      // 蓝色主题
    success: (res) => {
        this.imagePath = res.imagePath;
        uni.showToast({ title: '签名成功', icon: 'success' });
    },
    fail: (err) => {
        console.error('签名失败:', err);
        uni.showToast({ title: '已取消', icon: 'none' });
    },
    complete: () => {
        console.log('签批流程结束');
    }
});

3.2 田字格签批 openGrid

方法签名

openGrid(options: OpenGridOptions): void

参数说明

参数 类型 必填 默认值 说明
fontSize Number 50 手写字体大小 (影响田字格尺寸)
lineLength Number 10 每行显示字数,超出屏幕支持横向滚动
background String "#FFFFFF" 画布背景颜色 (Hex 格式)
crop Boolean true 最终图片是否只截取文字区域
format String "PNG" 图片格式 ("PNG" / "JPG")
themeColor String "#e63f32" 主题颜色 (笔触/按钮/UI 颜色)
success Function - 成功回调
fail Function - 失败回调
complete Function - 完成回调 (无论成功失败必执行)

代码示例

openGrid({
    fontSize: 60,               // 字体大小
    lineLength: 10,             // 每行 10 个字
    background: "#FFFBF0",      // 米黄色背景
    crop: true,                 // 裁剪多余空白
    format: "PNG",
    themeColor: "#D4380D",      // 红色主题
    success: (res) => {
        this.imagePath = res.imagePath;
        uni.showToast({ title: '书写成功', icon: 'success' });
    },
    fail: (err) => {
        console.error('书写失败:', err);
        uni.showToast({ title: '已取消', icon: 'none' });
    }
});

4. 完整页面示例

<template>
    <view class="container">
        <view class="header">
            <text class="title">手写签批演示</text>
        </view>

        <view class="btn-group">
            <button type="primary" @click="openBlankSign">空白签名</button>
            <button type="default" @click="openGridSign">田字格书写</button>
        </view>

        <view v-if="imagePath" class="preview">
            <text class="preview-title">签批预览</text>
            <image :src="imagePath" mode="widthFix" class="preview-img" />
            <view class="action-btns">
                <button type="default" @click="clearImage" class="clear-btn">重新签批</button>
            </view>
        </view>
    </view>
</template>

<script>
    import { openBlank, openGrid } from '@/uni_modules/zy-handwriting';

    export default {
        data() {
            return {
                imagePath: ''
            };
        },
        methods: {
            // 空白签名
            openBlankSign() {
                openBlank({
                    width: 1080,
                    height: 800,
                    background: "#FFFFFF",
                    crop: true,
                    format: "PNG",
                    themeColor: "#1890FF",
                    success: (res) => {
                        this.imagePath = res.imagePath;
                        uni.showToast({ title: '签名成功', icon: 'success' });
                    },
                    fail: (err) => {
                        console.error('签名失败:', err);
                        uni.showToast({ title: '已取消', icon: 'none' });
                    }
                });
            },

            // 田字格书写
            openGridSign() {
                openGrid({
                    fontSize: 60,
                    lineLength: 10,
                    background: "#FFFBF0",
                    crop: true,
                    format: "PNG",
                    themeColor: "#D4380D",
                    success: (res) => {
                        this.imagePath = res.imagePath;
                        uni.showToast({ title: '书写成功', icon: 'success' });
                    },
                    fail: (err) => {
                        console.error('书写失败:', err);
                        uni.showToast({ title: '已取消', icon: 'none' });
                    }
                });
            },
            // 清除图片
            clearImage() {
                this.imagePath = '';
            }
        }
    };
</script>

<style scoped>
    .container {
        padding: 40rpx;
        min-height: 100vh;
        background: #F8F9FA;
    }

    .header {
        text-align: center;
        padding: 40rpx 0;
    }

    .title {
        font-size: 40rpx;
        font-weight: bold;
        color: #333;
    }

    .btn-group {
        display: flex;
        flex-direction: column;
        gap: 24rpx;
        margin: 40rpx 0;
    }

    .preview {
        margin-top: 40rpx;
        background: #FFF;
        padding: 30rpx;
        border-radius: 16rpx;
        box-shadow: 0 4rpx 20rpx rgba(0,0,0,0.08);
    }

    .preview-title {
        font-size: 32rpx;
        color: #666;
        display: block;
        margin-bottom: 20rpx;
    }

    .preview-img {
        width: 100%;
        border-radius: 8rpx;
        border: 1px solid #EEE;
    }

    .action-btns {
        display: flex;
        gap: 20rpx;
        margin-top: 30rpx;
    }
</style>

5. 错误码说明

错误码 说明 处理建议
9010001 用户取消签批 正常流程,提示用户已取消
9010002 签批完成但无数据 检查存储权限或重试

6. 注意事项

6.1 权限配置

manifest.json 中确保配置以下权限:

"android": {
    "permissions": [
        "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
        "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>"
    ]
}

6.2 图片路径使用

用途 说明
页面展示 直接绑定 <image :src="imagePath" />
上传服务器 使用 uni.uploadFilefilePath 参数
本地存储 路径为 Android 本地绝对路径

6.3 颜色格式

backgroundthemeColor 参数支持以下格式:

// 推荐格式
background: "#FFFFFF"
themeColor: "#e63f32"

// 也支持简写
background: "#FFF"
themeColor: "#F00"

6.4 参数详解

参数 详细说明
background 画布背景色,同时也是最终生成图片的背景色
crop true 时只截取文字区域,false 时保留完整画布
lineLength 田字格模式下每行显示字数,超出屏幕支持横向滚动
fontSize 田字格模式下影响格子大小的字体参数

7. 常见问题

Q: 签名图片无法显示?
A: 检查 imagePath 是否为有效路径,Android 10+ 可能需要适配分区存储。

Q: 如何自定义画笔粗细?
A: 当前版本暂不支持,需联系插件作者或修改原生 SDK。

Q: 支持 iOS 吗?
A: 当前版本仅支持 Android,iOS 版本开发中。

Q: crop 参数有什么作用?
A: crop: true 时最终图片只包含手写内容区域,自动裁剪多余空白;crop: false 时保留完整画布尺寸。

Q: 田字格如何控制每行字数?
A: 通过 lineLength 参数设置,超出屏幕宽度时支持横向滚动。


8. 更新日志

版本 日期 更新内容
v1.0 2026-02-20 初始版本发布

9. 技术支持

项目 说明
插件名称 zy-handwriting
适用框架 uni-app (UTS Android)
问题反馈 联系插件开发者

温馨提示: 使用前请确保已正确配置原生 SDK 依赖和权限声明。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

WRITE_EXTERNAL_STORAGE

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: