如何解决PDF生成 - 签名后锁定
我们正在为客户生成 PDF。在生成的 PDF 中,有一些输入加上两个签名。我们的目标是当用户对其中一个签名进行签名时,我们希望锁定全部或部分输入。 Adobe Acrobat Reader中有一个复选框,询问您是否要在签名后锁定文档,但我们的客户不想手动选中此复选框,而是自动进行。我们知道这是可能的,但我找不到合适的解决方案。
我们使用的是用 PHP 编写的 TCPDF 库。没有这样的选项可以使签名锁定 PDF(已调查该库的来源)。我假设我需要为该库提供该选项 - 从规范中添加一些选项。我在官方规范(https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdf_reference_archive/pdf_reference_1-7.pdf - 第 695 页及更低)中找到了“如何”做到这一点,或者如何做到这一点,但我无法使其发挥作用。
在 TCPDF 库中生成签名字段的 PHP 代码:
if (!empty($this->empty_signature_appearance)) {
foreach ($this->empty_signature_appearance as $key => $esa) {
$actionObj = $this->_getobj();
// widget annotation for empty signature
$out = $this->_getobj($esa['objid'])."\n";
$out .= '<< /Type /Annot';
$out .= ' /Subtype /Widget';
$out .= ' /Rect ['.$esa['rect'].']';
$out .= ' /P '.$this->page_obj_id[($esa['page'])].' 0 R'; // link to signature appearance page
$out .= ' /F 4';
//$out .= ' /BS /S';
//$out .= ' /BS /U';
$out .= ' /FT /Sig';
$signame = $esa['name'].sprintf(' [%03d]',($key + 1));
$out .= ' /T '.$this->_textstring($signame,$esa['objid']);
$out .= ' /Ff 0';
$out .= ' >>';
$out .= "\n".'endobj';
$this->_out($out);
}
}
我尝试添加到以下代码中:
$out .= ' /FT /Sig /Lock 54 0';
加上创建 id 54 0 的新对象(下面的代码应该以某种方式引用这个新创建的对象):
$out = $actionObj . "\n";
$out .= '<</Action/All/Type/SigFieldLock>>';
$out .= "\n".'endobj';
$this->_out($out);
54 0 是 $actionObj 标识符 - 我静态放置它只是为了测试。 但无论我做出什么改变,签名都会消失。
也有一些可能性用javascript做一些事情,可以在生成时链接,但随后出现权限问题,因为函数setLock受到保护,在我的情况下无法调用。我猜Javascript是错误的,因为如果只有输入被标记为只读,有人可以稍后恢复它。 Javascript代码:
console.show();
console.clear();
/*trustedFunctionss = app.trustedFunction(function(field) {
field.setLock({action: "All"}); not working - not allowed
});*/
for (var fieldNumber = 0; fieldNumber < numFields; fieldNumber ++)
{
var field = getField(getNthFieldName(fieldNumber));
console.println(field.name);
if (field.type === "signature") {
//field.setLock({action: "All"}); not working - not allowed
/*
var signed = 0;
if (field.signatureInfo().status == 1) {
signed = 1;
break;
}*/
}
}
/*if (signed == 1)
{
for (var fieldNumber = 0; fieldNumber < numFields; fieldNumber ++)
{
var field = getField(getNthFieldName(fieldNumber));
if (field.type !== "signature") {
field.readonly = true;
}
}
}*/
我认为使用 /Lock 生成具有该功能的 pdf 的方法是正确的方法而不是 JS,但我无法使其真正起作用。我试图在互联网上找到一些东西,但没有任何东西适合我。这里有人有生成 PDF 的经验吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。