平台自身PDF文件流签署(印章图片)

更新时间:2021-11-08 16:23:35

接口描述

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

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

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

接口

SelfSignService.localSignPDF(SignPDFStreamBean stream,    PosBean signPos, String sealData, SignType signType)


请求参数

展开全部参数参数名称

类型

必选

长度

参数说明

示例值

sealData

String


印章图片Base64

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


signType

SignType


签章类型

(1)Single,单页签章

(2)Multi,多页签章

(3)Edges,签骑缝章

(4)Key,关键字签章


stream

SignPDFStreamBean


签署PDF文档信息



stream

byte[]


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


fileName

String

255

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


ownerPassword

 

String

100

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


dstPdfFile

String

255

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


signPos

PosBean


签章位置信息



posType

int


定位类型,0-坐标定位,1-关键字定位,默认0,SignType为关键字签署的时候,为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

FileDigestSignResult





errCode

int


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


msg

String

100

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


errorShow

boolean


错误信息是否建议显示


stream

byte[]


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


signDetailUrl

String


签署信息电子版链接


signServiceId

String

40

签署记录id


filePath

String


签署文档源路径


dstFilePath

String


签署后目标路径


markBit

String


客户自由标示位,用于辨识文件


请求示例  

其他示例语言请点击


	public static void main(String[] args) {
		// 获取正式生成服务
		// 获取客户端的代码:ServiceClient getKHD = ServiceClientManager.get("您的pojectId");
		// PDF摘要签署服务
		SelfSignService selfSignService = getKHD.selfSignService();
		/**
		 * 平台自身PDF摘要签署(文件流&印章图片)
		 */
		// 签署文档信息
		SignPDFStreamBean stream = new SignPDFStreamBean();
		stream.setStream(getFileBytes("D:/test-template.pdf"));
		stream.setDstPdfFile("D:/abc/f.pdf");// 签署后PDF文档本地路径,含文档名(为空时返回签署后的文件流)
		stream.setFileName("f");// 文档名称,e签宝签署日志对应的文档名,若为空则取文档路径中的名称
		stream.setMarkBit("文件标识");

		PosBean signPos = new PosBean();
		signPos.setPosType(1);// 定位类型,0-坐标定位,1-关键字定位,默认0,SignType为关键字签署的时候,为1,否则为0。用户可以不作处理。此处只是为了兼容旧版本而保留
		signPos.setPosPage("1-3");// 签署页码,若为多页签章,支持页码格式“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以上才可以看到时间

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

		FileDigestSignResult fileDigestSignResult = selfSignService.localSignPdf(stream, signPos, sealData,
				SignType.Key);
		if (fileDigestSignResult.getErrCode() != 0)
			System.out.println("平台自身PDF摘要签署(文件流&印章标识)失败:" + JSONObject.fromObject(fileDigestSignResult));
		else
			System.out.println("平台自身PDF摘要签署(文件流&印章标识)成功" + JSONObject.fromObject(fileDigestSignResult));

	}

	/**
	 * description 获取文件字节流
	 * 
	 * @param filePath 文件路径
	 **/
	public static byte[] getFileBytes(String filePath) {
		File file = new File(filePath);
		FileInputStream fis = null;
		byte[] buffer = null;

		try {
			fis = new FileInputStream(file);
			buffer = new byte[(int) file.length()];
			fis.read(buffer);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return buffer;
	}



响应示例

{
    "dstFilePath":"D:\abc\f.pdf",
    "errCode":0,
    "errShow":false,
    "filePath":"",
    "markBit":"",
    "msg":"成功",
    "signDetailUrl":"https://smlweb.tsign.cn/e.html?id=1173511039426318336",
    "signServiceId":"1173511039426318336",
    "stream":[

    ]
}



错误码

错误码

错误描述

解决方案


我要纠错