二、SDK方法说明
**SDK方法说明**
详细的引用方式可以参照demo的源码项目
2.1引入插件
使用继承的方式引入Activity,如下所示
```
public class HqDemoActivity extends SignVerticalViewActivity{
............
}
```
说明:
SignVerticalViewActivity:为好签定义控件,用户调用时需继承该activity
2.2添加SDK布局定义文件的设置
使用include标签,在工程的布局文件中引入好签布局定义
示例如下:
```
<include
android:id="@+id/rl_root_hq"
android:layout_height="match_parent"
android:layout_width="match_parent"
layout="@layout/activity_sign_vertical_view"/>
```
2.3需实现方法
**①initFileProvider()**
作用:初始化FileProvider
```
WellSign.setHQFileProvider("Your FileProvider");
```
**②closeHQFile()**
作用:关闭本页面,给好签插件调用
示例代码:
```
@Override
protected void closeHQFile() {
super.closeHQFile();
}
```
**③initContentView(Bundle savedInstanceState)**
作用:设置用户的布局文件
示例代码:
```
@Override
protected void initContentView(Bundle savedInstanceState) {
setHqContentView(R.layout.activity_hq_demo_vertical);
}
```
**④onActivityResult**
如果自己的acitvity中要实现该方法,请在onActivityResult
方法中,加入
```
super.onActivityResult();
```
**⑤继承SignVerticalViewActivity 的类如实现一下方法 需执行执行super方法**
```
@Override
protected void onHqDestroy() {
super.onHqDestroy();
}
@Override
public void onDestroy() {
super.onDestroy();
}
```
**⑥设置固化时的回调,success为true时,固化成功(error为0表示有数据固化,为1 无数据固化);success为false时,固化失败。**
```
setHQCallBack(new SignVerticalCallBack() {
@Override
public void signOut(boolean success, int error) {
Log.e("success", "success" + success + " " + error);
closeHQFile();//关闭文件
}
});
```
**⑦初始化好签授权**
在APP初始化的时候调用一次即可(一般在APPContext类或MainActivity类调用)
```
ReturnResult result = WellSign.initializeSNKey(context,sn, key);
```
参数说明:
|参数名称| 参数类型 |说明|
|-|-|-|
|context |Context |安卓类android.content.Context|
|sn |String |好签提供授权码|
|key |String |好签提供密钥|
返回值说明:
ReturnResult好签定义返回类,包含属性returnCode和returnMessage,可以获取到初始化后返回的code和message,据此判断初始化成功还是失败。
|Code值 |类型 |定义|
|-|-|-|
|0 |int| 初始化成功|
|-1 |int| 授权信息为空或授权日期错误|
|-2 |int| 模块名称错误|
|-3 |int| 用户名错误|
|-4 |int| 包名校验错误|
|-5 |int| 解析数据错误|
|-6 |int| OEM授权码错误|
|-7 |int| APP名校验错误|
|-8 |int| 设备平台不符|
**⑧指定文本对象字体**
在部分机型中,展示文本与保存后的文本字体不一致,导致保存后的pdf文本对象发生偏移错位,可以使用该方法强行指定保存字体样式。
```
WellSign.setHQEREBCharacterStylePath("/system/fonts/HarmonyOSHans.ttf");
```
由于安卓的默认显示字体由设备/system/etc/fonts.xml 文件配置指定,各设备厂商字体库都不相同。
例如:
vivo设备字体库:/system/fonts/VivoFont.ttf;
华为鸿蒙:/system/fonts/HarmonyOSHans.ttf。
......
调用者可根据设备型号,自行指定文本字体
2.4SDK公开方法
|方法名| 说明|
|-|-|
|setHQPenType(int type)|设置笔类型 type:1 手写模式 type:2 擦除模式 type:3 浏览模式|
|setHQPenColor(int color)|设置手写笔颜色 color:0 黑色 1:灰色 2:红色 3:蓝色 4:紫色 5:绿色 6:橙色|
|setHQPenThikcness(int thikcness)|设置手写笔粗细 thikcness:0-7 依次变粗|
|activateHQCustomMode()|自定义模式,开启之后隐藏好签原生界面,只显示PDF界面|
|enterHQScrawlMode()|进入涂鸦模式|
|exitHQScrawlMode()|离开涂鸦模式|
|openHQScrawlSettingPanel(View view) |涂鸦模式下,唤起设置笔迹颜色及粗细界面view:调起面板的控件,用于确定设置面板的显示位置|
|closeHQScrawlSettingPanel() |涂鸦模式下,关闭笔迹粗细设置界面|
|clearHQCurrentPageScrawlWithDialog() |清除当前页涂鸦笔迹(有弹窗)|
|clearHQCurrentPageWrite() |清除当前页涂鸦笔迹|
|clearHQAllPageWrite()| 清除所有页涂鸦笔迹|
|appendHQPage()| 新增一页,追加到最后一页|
|openHQFile(String filePath) |打开pdf文件|
|closeHQFile()| 关闭当前浏览文件和当前activity|
|solidHQFile() |固化笔迹到pdf中|
|switchHQFile( String filePath) |切换pdf文件filePath:文件路径|
|setHQDefaultUsePen(boolean usePen)|是否默认使用电磁笔(openHQFile方法前调用,只针对第一次使用设置)usePen:true表示默认使用电磁笔,false表示默认不使用|
|setHQAutoDetectePen(boolean detectePen)|设置电磁笔输入(openHQFile方法后调用)isPen:true表示只允许电磁笔手写 false表示都可以输入|
|setHqContentView(R.layout.activityvertical ,params)|R.layout.activityvertical 布局文params好签内部控件的布局方式|
|setHQPageIndexChangedListener(HQPageIndexChangedCallback callback) |设置页码改变回调|
|showHQPDFThumbnail() |显示缩略图|
|dismissHQPDFThumbnail()|关闭缩略图|
|showHQPDFSignInfo() |显示签字历史信息|
|haveUnsavedHQData() |是否含有还没保存的信息|
|getHQSignInfo() |获取签字历史信息|
|setHqSignerInfo() |设置签字人信息|
|jumpToPage(int index) |跳转到指定页|
|slidePriviousPage() |向上滑动一页|
|slideNextPage() |向下滑动一页|
|insertHQSign() |插入签字|
|insertHQSeal() |插入印章|
|insertHQTimestamp(int type, PointF position, SizeF frameSize) |插入日期, type:日期类型 1:"yyyy年MM月dd日 HH:mm:ss" 2:"yyyy年MM月dd日" 3:"yyyy/MM/dd HH:mm:ss" 4:"yyyy/MM/dd" position:相对于屏幕的位置 frameSize:大小 (position和frameSize可以传空 默认放在pdf展示区域的中间)|
|insertHQText() |插入文本|
|insertHQPicFromAlbum() |从相册插入图片|
|insertHQPicFromCamera()|拍照插入图片|
|insertHQPicture(Bitmap bitmap, PointF position) |插入图片,bitmap:图片,position:相对于屏幕的位置(传空,默认放在pdf展示区域的中间)|
|redo() |笔迹前进|
|undo()|笔迹后退|
|setHqCanSaveStrokeNum(int num)|设置笔迹点数,当笔迹点数大于该数值时才可以保存|
|setHqCanSaveCallBack(SignStrokeCountCallBack callBack)|设置当前笔迹是否可以保存的回调通知,与setHqCanSaveStrokeNum 方法配合使用|
|setHQSelfThumbView(LinearLayout infoContentView)|设置用户自定义缩略图显示view,在openHQFile方法前调用(根据参数 LinearLayout 的orientation 属性确定横向还是竖向显示),在用户自定义界面时根据需求调用,view的显示或者隐藏由用户自己控制|
|setHQSelfSignInfoView(LinearLayout infoContentView)|设置用户自定义签字信息显示view,在openHQFile方法前调用(根据参数 LinearLayout 的orientation 属性确定横向还是竖向显示),在用户自定义界面时根据需求调用,view的显示或者隐藏由用户自己控制|
|insertHQSign(float topLeftx,float topLefty,float defaultHeight,int timestampType,int timestampPosition,float timestampMargin)|插入指定位置的签名对象;topLeftx:指定签名左上角x轴坐标(相对于pdf宽度比例值,取值范围0-1);topLefty:指定签名左上角y轴坐标(相对于pdf高度比例值,取值范围0-1);defaultHeight:签名对象默认高度相对于pdf高度比例值,取值范围0-1);timestampType:时间戳类型(0:不插入时间戳,1:yyyy年MM月dd日 HH:mm:ss,2:yyyy年MM月dd日,3:yyyy/MM/dd HH:mm:ss,4:yyyy/MM/dd);timestampPosition:时间戳插入位置,0:时间戳在签名底部,1:时间戳在签名右侧;timestampMargin:时间戳距离签名位置,单位px(3.1.6版本新增)|
|insertHQText(float topLeftx,float topLefty,float defaultWidth,float fontSize,int indentSpaceNum)|插入指定位置的文字对象;topLeftx:指定文字左上角x轴坐标(相对于pdf宽度比例值,取值范围0-1),topLefty:指定文字左上角y轴坐标(相对于pdf高度比例值,取值范围0-1),defaultWidth:文字对象默认宽度(相对于pdf宽度比例值,取值范围0-1),fontSize:文字大小(相对于pdf宽度比例值,应小于defaultWidth值);indentSpaceNum:首行缩进空格数(3.1.6版本新增)|
|switchHQReaderTurnPageMode(int mode) |切换阅读模式;WellSign.HQ_READER_TYPE_HORIZONTAL:横向单页翻页,WellSign.HQ_READER_TYPE_VERTICAL:竖向连续翻页|
2.5 工具类
Wellsign类:
|方法名| 说明|
|-|-|
|getPdfPageCount(String pdfPath)|获取PDF总页数,pdfPath:文件路径|
|initializeSNKey(Context context,String sn, String key)|初始化好签授权|
|setHQFileProvider(String fileProvider)|设置好签fileProvider|
|setHQPDFDisplayMargins(int left, int top, int right, int bottom)|设置PDF展示区域到屏幕边缘的间距单位dp|
|setPenThickArray(float[] array)|自定义笔迹粗细的值(注意:需在openHQFile方法前设置)|
|joinPdf(String targetPdfPath,String fromPdfPath)|合并pdf文件(包含验签信息的合并);targetPdfPath:目标文件,fromPdfPath:源文件|
|clearPdfSignInfo(String pdfPath,String pdfPassword)|清除指定文件中的验签信息;pdfPath:目标文件,pdfPassword:文件密码(没有密码时为null值)|
|setSignRotateDisable(boolean disable)|控制签名是否可以旋转,true:禁止旋转(旋转按钮不显示),false:可以旋转(默认值,旋转按钮显示)(3.1.5版本新增)|
|setTextRotateDisable(boolean disable)|控制文本是否可以旋转,true:禁止旋转(旋转按钮不显示),false:可以旋转(默认值,旋转按钮显示)(3.1.5版本新增)|
|setAddSignDefaultPenSize(int penSize)|设置新增签名界面笔迹默认粗细,取值范围0-9(对应粗细1-10),注意:这里只设置默认值,sdk会记录用户上次使用的笔迹粗细 (3.1.5版本新增)|
|setSignObjectPositionCallback(SignObjectPositionCallback signObjectPositionCallback)|设置签名保存后的签名对象位置信息回调,接口需实现方法onSignObjectSaved(List<SignObjectPosition> objectPositionList);SignObjectPosition:位置信息数据(signObjectType:签名对象种类,0 签名,1 图片,2 文字,3 圈批,9 时间戳;pageNum:页码,从0开始;topLeftx:签字对象左上角x轴坐标,相对与pdf宽度的百分比值,topLefty:签字对象左上角y轴坐标,相对与pdf高度的百分比值;objectWidth:签字对象宽度,相对与pdf宽度的百分比值;objectHeight:签字对象高度,相对与pdf高度的百分比值)(3.1.6版本新增)|
|setTimestampStyle(List< String> timestampStyleList)|设置自定义时间戳样式列表,替代默认的时间戳样式,时间戳样式需要确保符合时间戳格式化规则,timestampStyleList的数据顺序即为显示顺序(3.2.0版本新增)|