Python docusignapi:填充模板时';s PDF表单字段的标签,为什么文本标签会在每个文档的左上角重复?

Python docusignapi:填充模板时';s PDF表单字段的标签,为什么文本标签会在每个文档的左上角重复?,python,docusignapi,Python,Docusignapi,我们的团队已经使用docusignpythonapi大约一年了,我们一直注意到这个问题,然后消失了几个星期,现在又回来了。每次我们生成一个新模板,其中文本选项卡锚定在文档的某个位置,这些选项卡就会复制到文档的左上角。生成的文档在第一页的角落有一堆重叠的文本字段,看起来非常不专业和混乱 下面是模板的外观。这两个字段堆叠在一起很难看到,因为它们已缩小到最小大小,但如果我单击它们,我可以看到它们的选项卡标签与页面上的两个字段(broker\u name和sign\u date)匹配 然后,在根据该模

我们的团队已经使用docusignpythonapi大约一年了,我们一直注意到这个问题,然后消失了几个星期,现在又回来了。每次我们生成一个新模板,其中文本选项卡锚定在文档的某个位置,这些选项卡就会复制到文档的左上角。生成的文档在第一页的角落有一堆重叠的文本字段,看起来非常不专业和混乱

下面是模板的外观。这两个字段堆叠在一起很难看到,因为它们已缩小到最小大小,但如果我单击它们,我可以看到它们的选项卡标签与页面上的两个字段(broker\u name和sign\u 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
    }
据我所知,制表符对象在创建模板之前仍然只有两个文本字段,所以我不知道为什么会出现重复的内容。任何关于这个问题的帮助或想法都将不胜感激

编辑: 这里我们称之为generate_name_date_tabs():


我想我看到了问题所在

您通过提供
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\u角色=[signer]
更改为
templateRoles=[{“email”:”email@domain.com“,”姓名“:”姓名“,”角色名称“:”签名者“}]
和更新

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
    )
不包括姓名和电子邮件

如果这不起作用,我们需要进一步挖掘。您能告诉我您在哪里调用
生成\u name\u date\u选项卡吗

您还可以在下面的代码中显示分配给签名者选项卡的内容吗

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**
    )

如果您看到这个问题在不同版本中消失和出现,我很可能是一个bug。让我们知道上述任何一项是否有助于缩小问题的范围。

首先,如果您想要签名的日期/时间,请不要使用文本选项卡,而是使用日期签名选项卡。在签署文件时自动填写日期/时间

其次,您正在使用一个模板。如果您的模板中有选项卡define,那么除了代码中的选项卡之外,它们还会出现

第三,如果不提供位置(X/Y坐标)和noanchorText,选项卡将被放置在位置0/0或左上角,如您所见


因此,右边的一个可能来自模板,代码中的一个显示在左上角,因为没有指定位置。

我们使用tab_标签匹配现有PDF表单字段的位置,而不是使用X/Y坐标或anchorText(Python中的anchor_字符串),并用数据填充这些字段。我确实认为这个问题与为模板创建选项卡,然后将它们分配到信封有关,但这是我获取字段以填充数据的唯一方法。从代码中删除选项卡,看看发生了什么我编辑了我的帖子,以包含生成_name _date _选项卡的调用。我尝试更改模板角色和签名者,虽然这确实删除了重复的字段,但它也使名称和日期选项卡不会填充我传入的值。如果有一种方法可以使用默认值填充PDF表单字段,而无需先创建模板,这可能会修复它,但我找不到一种方法。事实上,我在
模板\u req\u对象中尝试了您对签名者的修复,并且成功了!我将收件人更改为
recipients=recipients(签名者=[{“email”:destination\u email,“name”:signer\u name,“roleName”:“signer”,“recipientId”:“1”,“routingOrder”:“1”}])
并删除了重复的选项卡,但仍然填充了信封选项卡。
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**
    )