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 (将#修改为@)