首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DocuSign API:当通过标记填充模板的PDF表单字段时,为什么每个文档的左上角会重复文本选项卡?

DocuSign API:当通过标记填充模板的PDF表单字段时,为什么每个文档的左上角会重复文本选项卡?
EN

Stack Overflow用户
提问于 2021-01-11 17:37:39
回答 2查看 467关注 0票数 1

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

下面是模板的样子。堆叠在一起的两个字段很难看到,因为它们已经缩小到最小大小,但是如果单击它们,我可以看到它们的标签与页面上的两个字段(broker_name和sign_date)相匹配。

然后,在由此模板构建的信封的签名仪式上,空字段将被填充数据,并显示在角落中。

我们使用以下代码生成Tabs对象:

代码语言:javascript
复制
# 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])

我们在这里生成模板和信封:

代码语言:javascript
复制
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()的地方:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-11 23:31:35

我想我看到问题了。

通过提供signer字段来定义tabs中的选项卡。在后面的代码中,在创建信封时,再次在templateRoles中提供相同的templateRoles

代码语言:javascript
复制
  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"}]并更新

代码语言:javascript
复制
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的内容吗?

代码语言:javascript
复制
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。请告诉我们,上述任何一项是否有助于缩小问题范围。

票数 1
EN

Stack Overflow用户

发布于 2021-01-12 02:44:16

首先,如果您希望在签署日期/时间时,不要使用dateSignedTab. textTab,而是使用textTab自动填写签署文档的日期/时间。

第二,您使用的是模板。如果您的模板有选项卡定义--除了代码中的选项卡之外,它们还在那里。

第三,如果不提供位置(X/Y坐标)而不提供anchorText,则选项卡将放置在0/0位置或左上角,就像您看到的那样。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65671858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档