Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用itextsharp将数字签名图像或其字节[]保存到数据库中?_C#_Itext_Adobe_Acrobat - Fatal编程技术网

C# 如何使用itextsharp将数字签名图像或其字节[]保存到数据库中?

C# 如何使用itextsharp将数字签名图像或其字节[]保存到数据库中?,c#,itext,adobe,acrobat,C#,Itext,Adobe,Acrobat,我正在处理一个pdf表单,它包含一个数字签名字段。当我们点击数字签名字段时,它要求选择一个有效的签名,然后要求保存文件。 我的要求是根据用户id将数字签名保存到db。 我在pdf表单中有一个按钮,当我们单击该按钮时,它会重定向到处理程序文件。此处理程序类以httpcontext的形式获取数据。在这种情况下,在提交按钮之后,除数字签名字段外,所有其他文件数据都会到达处理程序 有没有办法将数字签名数据读取给处理程序 提前感谢。首先 此处理程序类以httpcontext的形式获取数据。在这种情况下,在

我正在处理一个pdf表单,它包含一个数字签名字段。当我们点击数字签名字段时,它要求选择一个有效的签名,然后要求保存文件。 我的要求是根据用户id将数字签名保存到db。 我在pdf表单中有一个按钮,当我们单击该按钮时,它会重定向到处理程序文件。此处理程序类以httpcontext的形式获取数据。在这种情况下,在提交按钮之后,除数字签名字段外,所有其他文件数据都会到达处理程序

有没有办法将数字签名数据读取给处理程序

提前感谢。

首先

此处理程序类以httpcontext的形式获取数据。在这种情况下,在提交按钮之后,除数字签名字段外,所有其他文件数据都会到达处理程序

听起来您的PDF表单提交操作设置了ExportFormat标志。在这种情况下,不会传输数字签名。您要么必须设置SubmitPDF标志,这将导致提交包含所有更改的整个文档,要么这两个标志都不设置(导致提交FDF)但是,IncludeAppendSaves标志会导致提交的FDF文件包含对基础PDF文档的所有增量更新的内容

在服务器端,需要完整的PDF来继续使用iText高级方法,对于SubmitPDF,这正是您得到的,对于IncludeAppendSaves,您必须将原始PDF与增量更新相结合

现在可以提取签名数据了

当您使用名称iTextSharp和标记时,我假设您使用的是5.5.x版本,而不是7.x版本的iText for.Net

无论何时拥有PDF,都可以使用用于读取文件的
PdfReader的
AcroFields
属性的
GetSignatureNames()
方法确定其签名字段:

PdfReader reader = new PdfReader(path);
AcroFields fields = reader.AcroFields;
List<String> names = fields.GetSignatureNames();
如果是可互操作的ISO 32000-1或PAdES/ISO 32000-2签名,这些字节将包含一个相当裸露的PKCS#1签名结构或CMS签名容器。要真正理解这些结构,通常还需要签名字典中的附加信息

byte[] signatureBytes = fields.GetSignatureDictionary(name).GetAsString(PdfName.CONTENTS).GetOriginalBytes();