预置多个签名域PDF模板批量文件流签署

更新时间:2024-01-18 20:08:17

接口描述

对包含多个预置签名域的PDF模板文档进行所指定的关联账户进行批量签署,其中待签署文件通过文件流的方式输入。

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

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

接口

TemplateSignService.timesStreamSign(SignPDFStreamBean fileBean, Map<String, Object> txtFields, Map<String, SignatureSettings> signatures)


请求参数

展开全部参数参数名称

类型

必选

长度

参数说明

txtFields

Map


模板中包含待填充文本域时,文本域Key-Value组合

signatures

Map


指定每个预置签名域签署所使用的账号、印章等信息。Map Key为预置签名域名称,Value为

SignatureSettings

,应包含账户Id、sealData等信息,详见对象解释。


accountId

String


签署账户唯一标识,由账号创建接口返回

sealData

String


签署时印章图片字节流Base64编码值


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

fileBean

SignPDFStreamBean


指定接口输入输出目标文件的对象封装


stream

byte[]


待签署文档本地二进制数据

fileName

String

255

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

ownerPassword

 

String

100

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

dstPdfFile

String

255

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

响应参数

展开全部参数参数名称

类型

必选

参数说明

FileDigestTimesSignResult

FileDigestTimesSignResult



errCode

int

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

msg

String

错误码对应的简要描述

signResult

Map

签署完成后返回的签署服务Id值,Map Key为签署接口指定的acountIdValue为该用户签署的所有signServiceId的列表信息

filePath

String

返回的签署源文件路径信息

dstFilePath

String

签署完成后输出的目标文件路径,当采用非文件流签署时不为空

stream

Byte[]

签署完成后输出的目标文件字节流信息,当采用文件流签署时不为空

请求示例  

其他示例语言请点击


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

		// 签署文档信息
		SignPDFStreamBean fileBean = new SignPDFStreamBean();
		fileBean.setStream(getFileBytes("D:/test-template.pdf"));
		fileBean.setDstPdfFile("D:/abc/f.pdf");// 签署后PDF文档本地路径,含文档名(为空时返回签署后的文件流)
		fileBean.setFileName("f");// 文档名称,e签宝签署日志对应的文档名,若为空则取文档路径中的名称
		fileBean.setMarkBit("文件标识");

		Map<String, Object> txtFields = new HashMap<>();// 模板中包含待填充文本域时,文本域Key-Value组合
		txtFields.put("user1", "杭州天谷");
		txtFields.put("user2", "芜浣");
		txtFields.put("year", "2019");
		txtFields.put("month", "09");
		txtFields.put("day", "19");

		Map<String, SignatureSettings> signatures = new HashMap<>();// 模板中包含待填充文本域时,文本域Key-Value组合
		SignatureSettings signatureSettings = new SignatureSettings();
		signatureSettings.setAccountId("34332DD1838842ACADEBDCD3D126B858");
		String sealData = "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";
		signatureSettings.setSealData(sealData);
		signatures.put("Signature1", signatureSettings);

		FileDigestTimesSignResult fileDigestTimesSignResult = templateSignService.timesStreamSign(fileBean, txtFields,
				signatures);
		if (fileDigestTimesSignResult.getErrCode() != 0)
			System.out.println("失败" + JSONObject.fromObject(fileDigestTimesSignResult));
		else
			System.out.println("成功" + JSONObject.fromObject(fileDigestTimesSignResult));



响应示例

{
    "dstFilePath":"",
    "errCode":0,
    "errShow":false,
    "filePath":"",
    "msg":"成功",
    "signResult":{
        "34332DD1838842ACADEBDCD3D126B858":[
            "1174247637373767687"
        ]
    },
    "stream":[
        37,
        80,
        68,
        70,
        45,
        49,
        46,
        54,
        10,
        37,
        ......
    ]
}



我要纠错