自动化法律工作流程
理想情况下,接受协议条款而不进行任何修改。 但是,通常情况下,协议需要自定义,这需要进行法律审查。 法律审查会产生巨额成本,并减缓交付协议条款的过程。 使用可根据批准的语言进行更改的预定义模板,可帮助法律团队管理和更安全地执行协议条款。
本教程使用的法律协议因州而异。 为了解决这些变化,将创建具有条件部分的协议模板,仅当满足特定条件时才会包括这些内容。 生成的文档可以是Word文档或PDF文档。 您还可以了解使用Adobe PDF Services API或Acrobat Sign保护文档的一些方法。
获取凭据
首先注册免费的Adobe PDF Services凭据:
您的数据
在这种情况下,系统会传递信息以帮助生成文档,并告知是否应包含某些章节:
{
"customer": {
"name": "Home Services Company",
"street": "123 Any Street",
"city": "Anywhere",
"state": "CA",
"zip": "12345",
"country":"USA",
"signer": {
"email": "johnnyechostone@gmail.com",
"firstName": "John",
"lastName": "Echostone"
}
},
"company": {
"name": "Projected Consultants",
"signer": {
"email": "maryburostone@gmail.com",
"firstName": "Mary",
"lastName": "Burostone"
}
},
"conditions": {
"includeGeneralTerms": true,
"includeConsumerDiscloure": true
}
}
在数据中,可以找到有关客户、客户姓名、签名者,以及客户所在状态等信息。 此外,还有一些章节用于介绍正在生成协议的公司,以及一些用于包含协议特定部分的条件标志。
将基本标签添加到文档
此方案使用“条款和条件”文档,该文档可以下载 此处.
-
打开 TermsAndConditions.docx Microsoft Word中的示例文档。
-
如果 Document Generation 插件已安装,请选择 Document Generation 在“功能区”中。 如果在功能区中看不到Document Generation,请按照以下说明进行操作。
-
选择 开始使用.
-
将上面写入的JSON示例数据复制到“JSON数据”字段中。
导航至 Document Generation Tagger 面板,以将标签置入文档。
插入公司名称
-
选择要替换的文本。 在这种情况下,您将替换文档打开部分中的COMPANY。
-
向内 Document Generation Tagger,搜索“name”。
-
在“公司”下,选择 名称.
-
选择 插入文本.
此时会放置一个名为 {{company.name}}
因为标记位于JSON中该路径的下方。
{
"company": {
"name": "Projected Consultants",
...
}
...
}
接下来,在CUSTOMER文本的开头部分重复此步骤。 重复 步骤1-4,将CUSTOMER替换为customer下的“name”。 输出应为 {{customer.name}}
,表明文本来自客户对象的下方。
AdobeDocument Generation API还允许您在页眉和页脚中添加标签,并将标签放在需要放置签名标题的最末端。
对重复此过程 步骤1-4 “COMPANY”(公司)和“CUSTOMER”(客户)字段的页脚。
最后,您需要 重复步骤1-4 要将签名页面中“客户”部分下的“名字”和“姓氏”替换为以下各项的标签: {{customer.signer.firstName}}
和 {{customer.signer.lastName}}
,而其他组别则分别为。 如果标签很长,并且由于在生成文档时替换了标签而重排到下一行,请不要担心。
文档的开始和页脚应该如下所示:
- 起始部分:
- 页脚:
- 签名页面:
现在,您的标签已放置在文档中,您可以预览生成的协议了。
预览生成的文档
您可以直接在Microsoft Word中根据示例JSON数据预览生成的文档。
-
向内 Document Generation Tagger,选择 生成文档.
-
系统首次可能会提示您使用Adobe ID登录。 选择 登录 并完成使用您的凭据登录的提示。
-
选择 查看文档.
-
此时会打开一个浏览器窗口,您可以预览文档结果。
为每个状态添加条件项
在下一部分中,您根据特定的输入数据条件仅设置要包括的某些部分。 在示例文档中,第4节和第5节仅与特定状态有关。 对于这种情形,当客户处于特定状态时,只应包含特定于状态的条款。 此外,如果删除Microsoft Word中的这一部分,则该部分不应包含在编号中。 使用Document Generation API的“条件内容”功能对此进行标记。
-
在文档中,选择“加州信息披露条款”部分和所有子项目符号。
-
向内 Document Generation Tagger,选择 高级.
-
展开 条件内容.
-
向内 选择记录 字段,搜索和选择 customer.state.
-
向内 选择运算符 字段,选择 =.
-
向内 值 字段,类型 CA.
-
选择 插入条件.
现在,该分区被一些称为条件分区标签的标签所包围。 添加标签时,它可能添加了conditional-section标签作为编号行。 可以通过在标签前回退来删除删除删除项,否则,它将像生成文档时标签不存在一样对项目进行编号。 条件部分以 {% end-section %}
标记。
重复步骤1-7 用于 《华盛顿披露》 部分,替换 CA 值 WA 以表示该部分仅在客户所在的州是华盛顿时显示。
使用条件部分进行测试
条件部分就位后,您可以通过选择预览 生成文档.
生成文档时,请注意,包含的节仅符合数据条件的节。 在下面的示例中,由于该州等于CA,因此仅包括California部分。
另一个显着变化是,下一节“使用服务和软件”的编号为5。 这意味着,如果忽略Washington部分,编号将继续。
要测试模板在华盛顿州而不是加利福尼亚州时的行为是否正确,请更改模板的示例数据:
-
向内 Document Generation Tagger,选择 编辑输入数据.
-
选择 编辑.
-
在JSON数据中,更改 CA 收件人 WA.
-
选择 生成标签.
-
选择 生成文档 以重新生成文档。
请注意,该文档仅包含华盛顿州部分。
添加条件语句
与条件部分一样,在满足某些条件时,也可以包含特定的句子。 就这个例子来说,加利福尼亚和华盛顿之间的回报政策是不同的。
- 在第3.1节中,选择第一句“在华盛顿州购买时,必须在原始交易后的30天内通过MAIL退货,以获得全额退款。”
- 向内 Document Generation Tagger,选择 高级.
- 展开 条件内容.
- 下 内容类型,选择 短语.
- 向内 选择记录 字段,搜索和选择 customer.state.
- 向内 选择运算符 字段,选择 =.
- 向内 值 字段,类型 CA.
- 选择 插入条件.
虽然标签名称相同,但短语和章节的主要区别在于短语包含章节不包含新行。 condition-section标记和 — end-section标记必须位于同一段落中。
为Acrobat Sign添加标签
Acrobat Sign允许您发送协议以请求签名,或嵌入到Web体验中,供其他人轻松查看和签名。 Microsoft Word中的AdobeDocument Generation Tagger允许您在使用Acrobat Sign发送文档之前轻松地为文档预先添加标签,因此签名始终放在正确的位置。 在这种情况下,有两个签名者需要签名文档并设定其日期。
-
导航到客户必须签名的位置。
-
将光标放在需要放置签名的位置。
-
向内 Document Generation Tagger,选择 Adobe Sign.
-
向内 指定收件人数 字段,设置收件人的数量(本示例使用2)。
-
向内 收件人 字段,选择 Signer-1.
-
向内 字段 类型,选择 签名.
-
选择 插入Adobe Sign文本标记.
这会将签名字段放置在第一个签名者需要签名的位置。
接下来,为签名者放置一个数据字段,该签名者在签名时自动填充。
-
将光标移到日期应该放置的位置。
-
将字段类型设置为日期。
-
选择 插入Adobe Sign文本标记.
放置的Date标记相当长: {{Date 3_es_:signer1:date:format(mm/dd/yyyy):font(size=Auto)}}
. Acrobat Sign文本标记必须保留在同一行,这与Document Generation标记不同。 该 :format()
和 font()
参数是可选的,因此对于这种情况,我们可以将标记缩短为 {{Date 3_es_:signer1:date}}
.
重复以上步骤 公司签名 部分。 执行此操作时,您必须将收件人字段更改为 Signer-2 否则,所有签名字段将分配给同一人。
生成协议
您现在已为文档添加了标签,可以开始使用了。 在下一部分中,了解如何使用Document Generation API示例为Node.js生成文档。 这些示例适用于任何语言。
打开在注册凭据时下载的pdfservices-node-sdk-samples-master文件。 这些文件包括pdfservices-api-credentials.json和private.key文件。
-
打开您的 终端 安装依赖关系的方法
npm install
. -
复制样本 data.json 到 resources 文件夹。
-
将您创建的Word模板复制到 resources 文件夹。
-
在samples文件夹的根目录下创建一个名为 generate-salesOrder.js.
code language-none const PDFServicesSdk = require('@adobe/pdfservices-node-sdk'). const fs = require('fs'); const path = require('path'); var dataFileName = path.join('resources', '<INSERT JSON FILE'); var outputFileName = path.join('output', 'salesOrder_'+Date.now()+".pdf"); var inputFileName = path.join('resources', '<INSERT DOCX>'); //Loads credentials from the file that you created. const credentials = PDFServicesSdk.Credentials .serviceAccountCredentialsBuilder() .fromFile("pdfservices-api-credentials.json") .build(); // Setup input data for the document merge process const jsonString = fs.readFileSync(dataFileName), jsonDataForMerge = JSON.parse(jsonString); // Create an ExecutionContext using credentials const executionContext = PDFServicesSdk.ExecutionContext.create(credentials); // Create a new DocumentMerge options instance const documentMerge = PDFServicesSdk.DocumentMerge, documentMergeOptions = documentMerge.options, options = new documentMergeOptions.DocumentMergeOptions(jsonDataForMerge, documentMergeOptions.OutputFormat.PDF); // Create a new operation instance using the options instance const documentMergeOperation = documentMerge.Operation.createNew(options) // Set operation input document template from a source file. const input = PDFServicesSdk.FileRef.createFromLocalFile(inputFileName); documentMergeOperation.setInput(input); // Execute the operation and Save the result to the specified location. documentMergeOperation.execute(executionContext) .then(result => result.saveAsFile(outputFileName)) .catch(err => { if(err instanceof PDFServicesSdk.Error.ServiceApiError || err instanceof PDFServicesSdk.Error.ServiceUsageError) { console.log('Exception encountered while executing operation', err); } else { console.log('Exception encountered while executing operation', err); } });
-
替换
<JSON FILE>
/resources中的JSON文件的名称。 -
替换
<INSERT DOCX>
DOCX文件的名称。 -
要运行,请使用 终端 执行节点
generate-salesOrder.js
.
输出文件位于/output文件夹中,并且正确生成了文档。
您可以通过更改下面的行来更改格式。 如果要将此文档发送给某人以供其在Word中编辑或供其审阅合同,DOCX格式非常有用。
PDF:
options = new documentMergeOptions.DocumentMergeOptions(jsonDataForMerge,
documentMergeOptions.OutputFormat.PDF);
Word:
options = new documentMergeOptions.DocumentMergeOptions(jsonDataForMerge, documentMergeOptions.OutputFormat.DOCX);
对于PDF或DOCX输出格式,还必须将输出文件的名称分别更改为.pdf或.docx:
var outputFileName = path.join('output', 'salesOrder_'+Date.now()+".docx");
发送协议以供签名
Adobe Acrobat Sign 允许您将协议发送给一个或多个收件人,供其查看和签署文档。 除了易于使用的发送文档以供签名的用户体验之外,您还可以使用REST API来接受Word、PDF、HTML和其他格式并发送它们以供签名。
以下示例逐步说明如何使用REST API文档页面来获取以前生成的文档并发送它以供签名。 首先,了解如何通过Acrobat Sign Web界面执行此操作,然后了解如何使用REST API执行此操作。
获取Acrobat Sign帐户
如果您没有Acrobat Sign帐户,请注册一个开发人员帐户并查看文档 此处,然后选择 开发人员帐户注册. 系统会提示您填写表单并接收验证电子邮件。 完成此操作后,您将定向到一个网站以设置您的密码和帐户,然后您可以在其中登录Acrobat Sign。
从Web界面发送协议
-
选择 发送 从导航栏中打开。
-
向内 收件人 字段中,指定两个电子邮件地址。 最好使用与您的Acrobat Sign帐户无关联的电子邮件地址。
-
设置 协议名称 和 消息.
-
选择 添加文件 并从计算机上传生成的文件。
-
选择 预览并添加签名字段。
-
选择 下一步。
-
向下滚动到签名页面时,您可以看到根据标签放置的签名字段。
-
选择 发送。
-
在您的电子邮件中,会显示一条消息,其中包含用于查看和签名的链接。
-
选择 审阅并签名.
-
选择 继续 接受使用条款。
-
选择 开始 跳转到您需要签名的位置。
-
选择 单击此处进行签名.
-
键入您的签名。
-
选择 应用.
-
选择 单击以签名.
随后将一封电子邮件发给下一个签名者。 重复步骤9-16以查看并签署第二个签名者。
完成协议后,通过电子邮件将协议的签名副本发送给各方当事人。 此外,您还可以在Acrobat Sign Web界面中检索已签名的协议, 管理 页面。
接下来,了解如何通过REST API文档执行相同的操作。
获取凭据
-
导航至 Acrobat Sign REST文档.
-
展开 transientDocuments 以及 POST/transientDocuments.
-
选择 OAUTH ACCESS-TOKEN.
-
检查的OAUTH权限 agreement_write, agreement_sign, widget_write 和 library_write.
-
选择 授权.
-
系统会弹出窗口提示您使用Acrobat Sign帐户登录。 登录用户您的管理员的用户名和密码。
-
系统会提示您允许访问REST文档。 选择 允许访问.
持有者令牌随后被添加到 Authorization 字段。
要了解有关如何为Acrobat Sign创建授权令牌的更多信息,您可以按照概述的步骤操作 此处.
上传临时文档
由于在前面的步骤中添加了授权令牌,因此您需要上传文档以进行API调用:
-
向内 文件 字段中,上传在之前步骤生成的PDF文档。
-
选择 试用!.
-
向内 响应正文,复制 transientDocumentId 值。
该 transientDocumentId 用于引用临时存储在Acrobat Sign中的文档,以便在后续API调用中引用。
发送以请求签名
上传文档后,您需要发送协议以供签名。
-
展开协议部分和POST协议部分。
-
在 协议信息 字段,请使用以下JSON填充:
code language-none { "fileInfos": [ { "transientDocumentId": "3AAABLblqZhAJeoswpyslef8_toTGT1WgBLk3TlhfJXy_uSLlKyre2hjF0-J1meBDn0PlShk0uQy6JghlqEoqXNnskq7YawteF6QWtHefP9wN2CW_Xbt0O9kq1tkpznG0a5-mEm4bYAV1FGOnD1mt_ooYdzKxm7KzTB11DLX2-81Zbe2Z1suy7oXiWNR3VSb-zMfIb5D4oIxF8BiNfN0q08RwT108FcB1bx4lekkATGld3nRbf8ApVPhB72VNrAIF0F1rAFBWTtfgvBKZaxrYSyZq73R_neMdvZEtxWTk5fii_bLVe7VdNZMcO55sofH61eQC_QIIsoYswZP4rw6dsTa68ZRgKUNs" } ], "name": "Terms and Conditions", "participantSetsInfo": [ { "memberInfos": [ { "email": "adobesigndemo+customer@outlook.com" } ], "order": 1, "role": "SIGNER" }, { "memberInfos": [ { "email": "adobesigndemo+company@outlook.com" } ], "order": 1, "role": "SIGNER" } ], "signatureType": "ESIGN", "state": "IN_PROCESS" }
-
选择 试用!.
POST协议API 返回协议的ID。 要获取JSON模型架构的模板,请选择 最小模型架构. 有关参数的完整列表,请参见 完整模型架构 部分。
检查协议状态
获得协议ID后,您可以发送协议状态。
- 展开 GET/agreements/{agreementId}.
- 由于可能需要额外的OAUTH范围,请选择 OAUTH-ACCESS-TOKEN 再来一次。
- 将上一个API调用响应中的agreementId复制到agreementId字段中。
- 选择 立即试用!.
现在您已了解关于该协议的信息。
{
"id": "CBJCHBCAABAAc6LyP4SVuKXP_pNstzIzyripanRdz4IB",
"name": "Terms and Conditions",
"groupId": "CBJCHBCAABAAoyMb1yIgczAGhBuJeHf99mglPtM7ElEu",
"type": "AGREEMENT",
"participantSetsInfo": [
{
"id": "CBJCHBCAABAAzZE-IcHHkt05-AVbxas4Jz7DUl3oEBO6",
"memberInfos": [
{
"email": "adobesigndemo+customer@outlook.com",
"id": "CBJCHBCAABAAyWgMMReqbxUFM7ctI5xz16c2kOmEy-IQ",
"securityOption": {
"authenticationMethod": "NONE"
}
}
],
"role": "SIGNER",
"order": 1
},
{
"id": "CBJCHBCAABAAaRHz3gY2W0w5n_6pj1GMMuZAfhBihc1j",
"memberInfos": [
{
"email": "adobesigndemo+company@outlook.com",
"id": "CBJCHBCAABAAOZQwjPwJXFiX8YDKPYtzMpftsmxYrIo9",
"securityOption": {
"authenticationMethod": "NONE"
}
}
],
"role": "SIGNER",
"order": 1
}
],
"senderEmail": "adobesigndemo+new@outlook.com",
"createdDate": "2022-03-22T02:59:36Z",
"lastEventDate": "2022-03-22T02:59:41Z",
"signatureType": "ESIGN",
"locale": "en_US",
"status": "OUT_FOR_SIGNATURE",
"documentVisibilityEnabled": true,
"hasFormFieldData": false,
"hasSignerIdentityReport": false,
"documentRetentionApplied": false
}
在更新发生更改时获取通知的更高效的方法是通过Webhook,您可以了解有关 [此处] (https://opensource.adobe.com/acrobat-sign/developer_guide/webhookapis.html.
存储已签名的文档
签署文档后,可使用GET/agreements/combinedDocument文件检索该文档。
- 展开 GET/agreements/{agreementId}/combineddocument.
- 设置 agreementId 到 agreementId 从上一个API调用提供。
- 选择 立即试用!.
可以使用attachSupportingDocuments和attachAuditReport参数设置附加审核报告或支持文档的其他参数。
在 响应正文,然后可以将其下载到您的计算机并存储在您喜欢的位置。
更多选项
除了生成文档并发送文档以供签名之外,还可以采取其他操作。
例如,如果文档没有签名,Adobe PDF Services API提供了许多可以在生成协议后转换文档的方法,例如:
- 使用密码保护文档
- 如果有大型图像,请压缩PDF
- 要详细了解其他可用操作,请参阅Adobe PDF Services API示例文件的/src文件夹中的脚本。 您还可以通过查看有关可以使用的不同操作的文档来了解更多信息。
此外,Acrobat Sign还提供多种其他功能,例如:
- 在应用程序中嵌入签名体验
- 为签名者添加身份验证方法
- 配置电子邮件通知设置
- 作为协议的一部分下载单独的文档
进一步学习
有兴趣了解更多信息? 了解一些其他的使用方法 Adobe Acrobat Services:
- 了解更多来自 文档
- 查看Adobe Experience League上的更多教程
- 使用/src文件夹中的示例脚本查看如何使用PDF
- 关注 Adobe技术博客 了解最新提示和技巧
- 订阅 纸质剪辑(每月实时流) 了解如何使用 Adobe Acrobat Services.