DocuSign API:当通过标签填充模板的 PDF 表单域时,为什么文本标签会在每个文档的左上角重复出现?
DocuSign API: When populating template's PDF form fields by tag, why do Text tabs get duplicated in the upper-left corner of every document?
我们的团队使用 Docusign Python API 大约一年了,我们一直注意到这个问题,然后消失几周,现在又回来了。每次我们生成一个新模板时,文本选项卡锚定在文档的某处,选项卡就会复制到文档的左上角。生成的文档在第一页的角落有一堆重叠的文本字段,看起来很不专业和凌乱。
这是模板的样子。这两个堆叠在彼此顶部的字段很难看到,因为它们已缩小到最小尺寸,但如果我单击它们,我可以看到它们的选项卡标签与页面上的两个字段匹配(broker_name 和 sign_date).
然后在使用此模板构建的信封的签字仪式上,空白字段会填充数据,并显示在角落里。
我们使用以下代码生成 Tabs 对象:
# Returns a Tabs object with name and date tabs. For envelopes that only contain those two fields.
def generate_name_date_tabs(name, date):
name = Text(document_id = '1', page_number = '1', recipient_id = '1', value=name, tab_label = 'eh_broker_name')
date = Text(document_id = '1', page_number = '1', recipient_id = '1', value=date, tab_label = 'eh_sign_date')
return Tabs(text_tabs=[name, date])
我们在这里生成模板和信封:
def create_application_envelope(destination_email, base64_file_content, signer_name="PlanProvide", signer_tabs=None, is_embedded_signing=False):
# Create an application envelope
# docusign_auth.DSClient.login("jwt")
account_id = session["ds_account_id"]
envelope_api = docusign_api_handler.get_envelope_api()
templates_api = docusign_api_handler.get_templates_api()
access_code = generate_access_code()
signer = Signer(
email=destination_email,
name=signer_name,
recipient_id="1",
routing_order="1",
role_name="signer",
# Use a six-character access code so URL doesn't expire
access_code=access_code,
tabs=signer_tabs
)
doc = Document(
document_base64 = base64_file_content,
name = "Your application generated by PlanProvide",
file_extension = "pdf",
document_id = 1,
# Detect Adobe form field names
transform_pdf_fields = True
)
documents = [doc]
template_req_object = EnvelopeTemplate(
documents=documents, email_subject="Please sign this document",
recipients=Recipients(signers=[signer]),
description="Template created via the API",
name="Application Template",
shared="false",
status="created"
)
try:
res = templates_api.create_template(account_id=account_id, envelope_template=template_req_object)
except Exception as e:
raise DocusignError(e)
try:
template_id = res.templates[0].template_id
except:
template_id = res.template_id
envelope_definition = EnvelopeDefinition(
email_subject="Please sign this document sent from the Python SDK",
template_id=template_id,
template_roles=[signer],
status="sent" # requests that the envelope be created and sent.
)
# Send it to an email
try:
results = envelope_api.create_envelope(account_id=account_id, envelope_definition=envelope_definition)
except Exception as e:
raise DocusignError(e)
return {
"envelope_id": results.envelope_id,
"access_code": access_code
}
据我所知,Tabs 对象在创建模板之前仍然只有两个文本字段,所以我不确定为什么会出现重复项。非常感谢有关此问题的任何帮助或想法!
编辑:
这是我们调用 generate_name_date_tabs():
的地方
tabs = docusign_api_handler.generate_name_date_tabs(name, datetime.today().strftime('%m-%d-%y'))
try:
resp = application_services.create_application_envelope(
destination_email,
base64_file_content,
signer_name=name,
signer_tabs=tabs, is_embedded_signing=False)
我想我明白问题了。
您通过提供 tabs
字段来定义 signer
内的选项卡。稍后在代码中,当您创建信封时,您再次在 templateRoles
:
中提供相同的 signer
except:
template_id = res.template_id
envelope_definition = EnvelopeDefinition(
email_subject="Please sign this document sent from the Python SDK",
template_id=template_id,
template_roles=[signer],
status="sent"
我会将 template_roles=[signer]
更改为 templateRoles=[{"email":"email@domain.com", "name": "name", "roleName" : "signer"}]
并更新
signer = Signer(
recipient_id="1",
routing_order="1",
role_name="signer",
# Use a six-character access code so URL doesn't expire
access_code=access_code,
tabs=signer_tabs
)
不包括姓名和电子邮件。
如果这不起作用,我们需要挖掘一些内容 more.Can 请说明您的电话 generate_name_date_tabs
?
您还可以在下面的代码中显示分配给 signer_tabs
的内容吗?
signer = Signer(
email=destination_email,
name=signer_name,
recipient_id="1",
routing_order="1",
role_name="signer",
# Use a six-character access code so URL doesn't expire
access_code=access_code,
**tabs=signer_tabs**
)
如果您发现问题在不同的版本中消失和出现,我很可能是一个错误。让我们知道以上任何一项是否有助于缩小问题范围。
首先,如果你想在签名时使用 date/time,请不要使用 textTab,而是使用 dateSignedTab.那个在文档签名时自动填写date/time。
其次,您使用的是模板。如果您的模板定义了选项卡 - 除了代码中的选项卡之外,它们还会存在。
第三,如果你不提供位置(X/Y坐标)并且没有anchorText,标签将被放置在位置0/0或左上角就像你看到的那样。
所以,正确位置的可能是来自模板,您代码中的那个显示在左上角,因为没有指定位置。
我们的团队使用 Docusign Python API 大约一年了,我们一直注意到这个问题,然后消失几周,现在又回来了。每次我们生成一个新模板时,文本选项卡锚定在文档的某处,选项卡就会复制到文档的左上角。生成的文档在第一页的角落有一堆重叠的文本字段,看起来很不专业和凌乱。
这是模板的样子。这两个堆叠在彼此顶部的字段很难看到,因为它们已缩小到最小尺寸,但如果我单击它们,我可以看到它们的选项卡标签与页面上的两个字段匹配(broker_name 和 sign_date).
然后在使用此模板构建的信封的签字仪式上,空白字段会填充数据,并显示在角落里。
我们使用以下代码生成 Tabs 对象:
# Returns a Tabs object with name and date tabs. For envelopes that only contain those two fields.
def generate_name_date_tabs(name, date):
name = Text(document_id = '1', page_number = '1', recipient_id = '1', value=name, tab_label = 'eh_broker_name')
date = Text(document_id = '1', page_number = '1', recipient_id = '1', value=date, tab_label = 'eh_sign_date')
return Tabs(text_tabs=[name, date])
我们在这里生成模板和信封:
def create_application_envelope(destination_email, base64_file_content, signer_name="PlanProvide", signer_tabs=None, is_embedded_signing=False):
# Create an application envelope
# docusign_auth.DSClient.login("jwt")
account_id = session["ds_account_id"]
envelope_api = docusign_api_handler.get_envelope_api()
templates_api = docusign_api_handler.get_templates_api()
access_code = generate_access_code()
signer = Signer(
email=destination_email,
name=signer_name,
recipient_id="1",
routing_order="1",
role_name="signer",
# Use a six-character access code so URL doesn't expire
access_code=access_code,
tabs=signer_tabs
)
doc = Document(
document_base64 = base64_file_content,
name = "Your application generated by PlanProvide",
file_extension = "pdf",
document_id = 1,
# Detect Adobe form field names
transform_pdf_fields = True
)
documents = [doc]
template_req_object = EnvelopeTemplate(
documents=documents, email_subject="Please sign this document",
recipients=Recipients(signers=[signer]),
description="Template created via the API",
name="Application Template",
shared="false",
status="created"
)
try:
res = templates_api.create_template(account_id=account_id, envelope_template=template_req_object)
except Exception as e:
raise DocusignError(e)
try:
template_id = res.templates[0].template_id
except:
template_id = res.template_id
envelope_definition = EnvelopeDefinition(
email_subject="Please sign this document sent from the Python SDK",
template_id=template_id,
template_roles=[signer],
status="sent" # requests that the envelope be created and sent.
)
# Send it to an email
try:
results = envelope_api.create_envelope(account_id=account_id, envelope_definition=envelope_definition)
except Exception as e:
raise DocusignError(e)
return {
"envelope_id": results.envelope_id,
"access_code": access_code
}
据我所知,Tabs 对象在创建模板之前仍然只有两个文本字段,所以我不确定为什么会出现重复项。非常感谢有关此问题的任何帮助或想法!
编辑: 这是我们调用 generate_name_date_tabs():
的地方tabs = docusign_api_handler.generate_name_date_tabs(name, datetime.today().strftime('%m-%d-%y'))
try:
resp = application_services.create_application_envelope(
destination_email,
base64_file_content,
signer_name=name,
signer_tabs=tabs, is_embedded_signing=False)
我想我明白问题了。
您通过提供 tabs
字段来定义 signer
内的选项卡。稍后在代码中,当您创建信封时,您再次在 templateRoles
:
signer
except:
template_id = res.template_id
envelope_definition = EnvelopeDefinition(
email_subject="Please sign this document sent from the Python SDK",
template_id=template_id,
template_roles=[signer],
status="sent"
我会将 template_roles=[signer]
更改为 templateRoles=[{"email":"email@domain.com", "name": "name", "roleName" : "signer"}]
并更新
signer = Signer(
recipient_id="1",
routing_order="1",
role_name="signer",
# Use a six-character access code so URL doesn't expire
access_code=access_code,
tabs=signer_tabs
)
不包括姓名和电子邮件。
如果这不起作用,我们需要挖掘一些内容 more.Can 请说明您的电话 generate_name_date_tabs
?
您还可以在下面的代码中显示分配给 signer_tabs
的内容吗?
signer = Signer(
email=destination_email,
name=signer_name,
recipient_id="1",
routing_order="1",
role_name="signer",
# Use a six-character access code so URL doesn't expire
access_code=access_code,
**tabs=signer_tabs**
)
如果您发现问题在不同的版本中消失和出现,我很可能是一个错误。让我们知道以上任何一项是否有助于缩小问题范围。
首先,如果你想在签名时使用 date/time,请不要使用 textTab,而是使用 dateSignedTab.那个在文档签名时自动填写date/time。
其次,您使用的是模板。如果您的模板定义了选项卡 - 除了代码中的选项卡之外,它们还会存在。
第三,如果你不提供位置(X/Y坐标)并且没有anchorText,标签将被放置在位置0/0或左上角就像你看到的那样。
所以,正确位置的可能是来自模板,您代码中的那个显示在左上角,因为没有指定位置。