平台自身PDF文件多位置签署(印章图片)

更新时间:2021-11-08 16:21:33

接口描述

使用项目编号绑定的账户完成接入系统本地指定文档的多个签名域批量签署。

注:文件一旦签名盖章就不可以再进行任何填写或修改操作,否则在验证签署文件有效性时会显示文件被篡改,请在签章前完成所有内容填充。

文件涉及2个及以上签章时,请注意保留待签署文件流和每次签署后的文件流(含中间过程生成的文件流),方便在签署过程中出现失败时如何选择基于哪份文件的流进行重签。

接口

SelfSignService.multiPositionSign(SignPDFFileBean file, List<PosBean> signPos, String sealData, SignType signType)


请求参数

展开全部参数参数名称

类型

必选

长度

参数说明

示例值

sealData

String


印章base64
注意:

印章数据要和账户信息对应,否则会出现签署的印章和背后的数字证书不一致的情况,从而造成签署纠纷



signType

SignType


签章类型

(1)Single,单页签章

(2)Multi,多页签章

(3)Edges,签骑缝章

(4)Key,关键字签章


file

SignPDFFileBean


签署PDF文档信息



srcPdfFile

String

255

待签署PDF文档本地路径,含文档名(与bytes至少有一个不为空)


bytes

byte[]


待签署PDF文档本地二进制数据(与srcPdfFile至少有一个不为空)


dstPdfFile

String

255

签署后PDF文档本地路径,含文档名(为空时返回签署后的文件流)


fileName

String

255

文档名称,e签宝签署日志对应的文档名,若为空则取文档路径中的名称


ownerPassword

String

100

文档编辑密码,当目标PDF设置权限保护时必填


ShowImage

Boolean


是否增加e签宝logo图标


signPos

List<PosBean>


签章位置信息












posType

int


定位类型,0-坐标定位,1-关键字定位,默认0SignType为关键字签署的时候,为1,否则为0。用户可以不作处理。此处只是为了兼容旧版本而保留



posPage

String

25

签署页码,若为多页签章,支持页码格式“1-3,5,8“,若为坐标定位时,不可空



posX

float


签署位置X坐标,若为关键字定位,相对于关键字的X坐标偏移量,默认0



posY

float


签署位置Y坐标,若为关键字定位,相对于关键字的Y坐标偏移量,默认0



key

String

30

关键字,仅限关键字签章时有效,若为关键字定位时,不可空关键字建议不要设置特殊字符,因Adobe无法识别部分符号,某些特殊字符会因解析失败从而导致搜索不到



width

float


印章展现宽度,将以此宽度对印章图片做同比缩放。

       1)  为空:

若图片宽度超过159,印章宽度等比缩小至159

若图片宽度小于159,印章尺寸默认以图片大小为准;

       2)  不为空

印章宽度以传入参数为准。



QrcodeSign

boolean


是否是 二维码签署,默认为false。二维码签署不支持骑缝签和多页签



cacellingSign

boolean


是否是作废签签署,默认为false

如图所示:


AddSignTime

boolean


是否显示本地签署时间,需要width设置92以上才可以看到时间

如图所示:

响应参数

展开全部参数参数名称

类型

必选

长度

参数说明

示例值

FileDigestSignResult

FileDigestSignBatchResult





errCode

int


错误码,0标识成功,其他均标识失败


msg

String

100

错误信息,错误码对应的说明信息


errorShow

boolean


错误信息是否建议显示


stream

byte[]


完成签署的文档二进制数据


signServiceId

String


签章记录id


signDetailUrl

String


签署详情查看地址


filePath

String


签署文档源路径


dstFilePath

String


签署后目标路径


请求示例  

其他示例语言请点击


        // 获取正式生成服务
		// 获取客户端的代码:ServiceClient getKHD = ServiceClientManager.get("您的pojectId");

		// 平台用户PDF摘要签署服务
		SelfSignService selfSignService = getKHD.selfSignService();

		/**
		 * 平台用户PDF多指定位置摘要签署(文件流&指定手机短信验证)
		 */
		// 签署文档信息
		// 签署文档信息
		SignPDFFileBean file = new SignPDFFileBean();
		file.setSrcPdfFile("D:/test-template.pdf");// 待签署PDF文档本地路径,含文档名(与bytes至少有一个不为空)
		file.setDstPdfFile("D:/abc/g.pdf");// 签署后PDF文档本地路径,含文档名(为空时返回签署后的文件流)
		file.setFileName("g");// 文档名称,e签宝签署日志对应的文档名,若为空则取文档路径中的名称
		file.setShowImage(true);// 是否增加e签宝logo图标

		// 签章位置信息,可批量
		List<PosBean> list = new ArrayList<>();
		PosBean signPos = new PosBean();
		signPos.setPosType(1);// 定位类型,0-坐标定位,1-关键字定位,默认0,SignType为关键字签署的时候,为1,否则为0。用户可以不作处理。此处只是为了兼容旧版本而保留
		signPos.setPosPage("1-2");// 签署页码,若为多页签章,支持页码格式“1-3,5,8“,若为坐标定位时,不可空
		signPos.setPosX(60L);// 签署位置X坐标,若为关键字定位,相对于关键字的X坐标偏移量,默认0
		signPos.setPosY(0);// 签署位置Y坐标,若为关键字定位,相对于关键字的Y坐标偏移量,默认0
		signPos.setKey("金某某");// 关键字,仅限关键字签章时有效,若为关键字定位时,不可空
		// signPos.setCacellingSign(true);//是否是作废签签署,默认为false;如果签署作废章的话,建议线下也签署一份作废协议,这样法律效力较高
		signPos.setAddSignTime(true);// 是否显示本地签署时间,需要width设置92以上才可以看到时间
		list.add(signPos);

		String sealData = "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";

		FileDigestSignResult fileDigestSignResult = selfSignService.multiPositionSign(file, list, sealData,
				SignType.Key);
		if (fileDigestSignResult.getErrCode() != 0)
			System.out.println("签署失败:" + JSONObject.fromObject(fileDigestSignResult));
		else
			System.out.println("签署成功" + JSONObject.fromObject(fileDigestSignResult));



响应示例

{
    "msg":"成功",
    "dstFilePath":"D:\abc\g.pdf",
    "signDetailUrl":"https://smlweb.tsign.cn/e.html?id=119961858479xxxx",
    "markBit":"",
    "stream":[

    ],
    "errCode":0,
    "filePath":"",
    "errShow":false,
    "signServiceId":"1199618xxxxx"
}



错误码

错误码

错误描述

解决方案





我要纠错