将数字签名字段插入到动态创建的 PDF 中

问题描述

我正在尝试动态创建一个 PDF,用户可以通过编辑模板文本来控制它,然后从浏览器下载它。通过在数据库中存储 CLOB 来控制模板化文本。这一切都很好很容易,但我还需要在生成的 PDF 的底部添加一个数字/电子签名字段。我发现这方面的文档很少,但似乎 ColdFusion 这样做的方法是使用 cfpdf action="sign",文档以此为例:

<cfpdf action="sign"
source="#inputfilepath##inputfilename#"
destination="#signedfilepath##signedfilename#"
keystore="#certpath#cert.pfx" keystorepassword="certpass"
overwrite="true" pages="1" height="100"
width="100" position="100,100" author="false"
/>

ColdFusion 服务器密钥库的文件路径是“C:/Program Files/jdk-11.0.10/lib/security/cacerts/”。那里似乎没有证书文件。是否需要在命令行中使用 keytool 生成,如 here 所引用?

我的第二个选项(在 cfpdf 之后)似乎是通过 iText 实现 cfscript 库,因为 ColdFusion 是 Java 驱动的并在 JVM 上运行。这是我能够创建的模型,它可能会导致我正在寻找的东西:

<cfscript>
    resource = CreateObject("java","java.io.FileInputStream");
    resource.init("C:\path\OriginalLetter.pdf");
    os = CreateObject("java","java.io.FileOutputStream");
    os.init("C:\path\NewLetter.pdf");
    annotation = CreateObject("java","com.itextpdf.text.pdf.PdfAnnotation");
    annotation.init();
    reader = CreateObject("java","com.itextpdf.text.pdf.PdfReader");
    reader.init(resource);
    stamper = CreateObject("java","com.itextpdf.text.pdf.pdfstamper");
    stamper.init(reader,os);
    FormField = CreateObject("java","com.itextpdf.text.pdf.PdfFormField");
    FormField.init();
    field = FormField.createSignature(stamper.getWriter());
    field.setFieldName("Signature");
    field.setWidget(new Rectangle(30,830,170,770),annotation.HIGHLIGHT_NONE);
    stamper.addAnnotation(field,1);
    stamper.close();
</cfscript>

但似乎不确定这样的实现是否对 ColdFusion 有用。

再说一次,我在这方面似乎找不到什么,可以从在 ColdFusion 管理或什至在类似问题上有经验的人那里得到一些指导。我的备份计划是将实际模板 PDF 文件底部已经有签名块)放在服务器文件系统上,然后用户可以简单地从那里编辑文本,签名字段将保留在底部。为了更好地解释这一点,我从数据库中使用的模板化文本基于此文件内容;只是我无法将 PDF 数字签名字段之类的内容存储为文本。更具体地说,我使用 HTML 来生成内容,以便更好地格式化。用户可以通过浏览器上的 ckeditor 编辑文本,但同样,简单的 input 不会在 PDF 上呈现为签名字段。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)