复合模板添加多文档时签名标签重复问题求助
解决Composite Template多文档签名标签重叠问题
问题根源
你的代码存在两个核心问题导致签名标签重叠:
- 嵌套循环生成了过多重复的
CompositeTemplate实例,每份文档会和每个模板组合生成一个新的CompositeTemplate,导致所有收件人配置被重复应用到所有文档上。 - 未为每份文档的签名标签指定独立的绑定关系或位置,所有签名标签默认叠加在同一位置。
修复方案
调整代码结构,让每份文档对应一个独立的CompositeTemplate,并确保每个CompositeTemplate内的模板、文档、收件人配置一一绑定,同时为签名标签指定对应文档的位置:
修改后的代码示例
List<CompositeTemplate> compositeTemplateList = new ArrayList<>(); int compositeIdCounter = 1; // 遍历每份文档,每个文档对应一个CompositeTemplate for (Document targetDoc : documents) { CompositeTemplate cTemplate = new CompositeTemplate(); // 设置唯一的复合模板ID cTemplate.setCompositeTemplateId(String.valueOf(compositeIdCounter++)); // 绑定当前文档到这个复合模板 cTemplate.setDocument(targetDoc); // 配置服务器模板(如果所有文档用同一模板,直接复用ID即可) ServerTemplate serverTemplate = new ServerTemplate(); serverTemplate.setTemplateId("你的模板ID"); serverTemplate.setSequence("1"); // 序列值需与InlineTemplate一致 cTemplate.setServerTemplates(Arrays.asList(serverTemplate)); // 配置内联模板,为当前文档绑定独立的签名者 InlineTemplate inlineTemplate = new InlineTemplate(); inlineTemplate.setSequence("1"); // 与ServerTemplate的sequence匹配,确保绑定关系 Recipients recipients = new Recipients(); List<Signer> signers = new ArrayList<>(); for (SignerInfo signerInfo : signerList) { Signer signer = new Signer(); signer.setEmail(signerInfo.getEmail()); signer.setName(signerInfo.getName()); signer.setRecipientId(String.valueOf(signerInfo.getId())); // 唯一收件人ID // 关键:为当前文档设置独立的签名标签,指定绑定的文档和位置 Tabs tabs = new Tabs(); SignHere signHere = new SignHere(); signHere.setDocumentId("1"); // 当前复合模板内的文档ID默认是1 signHere.setPageNumber("1"); // 根据模板或需求调整页码 signHere.setXPosition("150"); // 调整X坐标避免重叠 signHere.setYPosition("200"); // 调整Y坐标避免重叠 tabs.setSignHereTabs(Arrays.asList(signHere)); signer.setTabs(tabs); signers.add(signer); } recipients.setSigners(signers); inlineTemplate.setRecipients(recipients); cTemplate.setInlineTemplates(Arrays.asList(inlineTemplate)); compositeTemplateList.add(cTemplate); } env.setStatus("sent"); env.setCompositeTemplates(compositeTemplateList);
关键调整说明
- 移除文档与模板的嵌套循环,确保每份文档仅对应一个CompositeTemplate,避免重复配置叠加。
- 为每个CompositeTemplate设置唯一的
compositeTemplateId,防止配置冲突。 - 保持
ServerTemplate和InlineTemplate的sequence值一致,确保模板与收件人配置绑定到当前文档。 - 为每个签名标签指定明确的文档ID和位置,确保每份文档的签名标签独立显示。
内容的提问来源于stack exchange,提问作者surabhi chaurasia
相关产品推荐
相关产品推荐

