Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
The following code snippet also works with Aspose.PDF.Drawing library.
Aspose.PDF for .NET 支持使用 SignatureField 类对 PDF 文件进行数字签名,并且在签署文档时,您还可以为 SignatureAppearance 设置图像。现在,此 API 还提供了提取签名信息以及与签名字段关联的图像的功能。
为了提取签名信息,我们在 SignatureField 类中引入了 ExtractImage 方法。请查看以下代码片段,演示从 SignatureField 对象提取图像的步骤:
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractImagesFromSignatureField()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractingImage.pdf"))
{
// Searching for signature fields
foreach (var field in document.Form)
{
var sf = field as Aspose.Pdf.Forms.SignatureField;
if (sf == null)
{
continue;
}
using (Stream imageStream = sf.ExtractImage())
{
if (imageStream != null)
{
continue;
}
using (System.Drawing.Image image = System.Drawing.Bitmap.FromStream(imageStream))
{
// Save the image
image.Save(dataDir + "output_out.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
}
}
Aspose.PDF for .NET 支持使用 SignatureField 类对 PDF 文件进行数字签名。目前,我们也可以确定证书的有效性,但无法提取完整的证书。可以提取的信息包括公钥、指纹、颁发者等。
为了提取签名信息,我们在 SignatureField 类中引入了 ExtractCertificate 方法。请查看以下代码片段,演示从 SignatureField 对象提取证书的步骤:
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractCertificate()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractSignatureInfo.pdf"))
{
// Searching for signature fields
foreach (var field in document.Form)
{
var sf = field as Aspose.Pdf.Forms.SignatureField;
if (sf == null)
{
continue;
}
// Extract certificate
Stream cerStream = sf.ExtractCertificate();
if (cerStream == null)
{
continue;
}
// Save certificate
using (cerStream)
{
byte[] bytes = new byte[cerStream.Length];
using (FileStream fs = new FileStream(dataDir + "input.cer", FileMode.CreateNew))
{
cerStream.Read(bytes, 0, bytes.Length);
fs.Write(bytes, 0, bytes.Length);
}
}
}
}
}
You can use the PdfFileSignature.TryExtractCertificate method to extract a certificate stream or a X509Certificate2 object.
您可以获取文档签名算法的信息。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private void GetSignaturesInfo()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "signed_rsa.pdf"))
{
using (var signature = new Aspose.Pdf.Facades.PdfFileSignature(document))
{
var sigNames = signature.GetSignatureNames();
var signaturesInfoList = signature.GetSignaturesInfo();
foreach (var sigInfo in signaturesInfoList)
{
Console.WriteLine(sigInfo.DigestHashAlgorithm);
Console.WriteLine(sigInfo.AlgorithmType);
Console.WriteLine(sigInfo.CryptographicStandard);
Console.WriteLine(sigInfo.SignatureName);
}
}
}
}
上述示例的示例输出:
Sha256
Rsa
Pkcs7
Signature1
您可以使用 SignaturesCompromiseDetector 类来验证数字签名是否受损。调用 Check() 方法检查文档的签名。如果未检测到签名受损,方法将返回 true。如果方法返回 false,您可以使用 HasCompromisedSignatures 属性检查是否存在受损签名,并通过 CompromisedSignatures 属性获取受损签名的列表。
要验证现有签名是否覆盖整个文档,请使用 SignaturesCoverage 属性。该属性可以具有以下值:
以下是保留 markdown 的翻译:
您可以使用 UnsignedContentAbsorber 类从文档中提取未签名的内容。如果已签名的文档被 非增量 修改,PDF 结构中的对象可能会重新排列,导致无法确定哪些部分最初已签名,哪些未签名。在这种情况下,吸收器将指示文档已被非增量修改。
如果文档是增量修改的,则我们可以检测出哪些内容已更改。遗憾的是,由于页面内容流被压缩,无法确定页面文本的具体哪一部分被更改,因此吸收器会将整页标记为已修改。
其他被跟踪的更改包括:
如果批注、字段或 XForm 被修改且影响其外观,吸收器也会报告这些更改。处理结果由 UnsignedContentAbsorber.Result 类表示。
UnsignedContentAbsorber.Result表示尝试从 PDF 文档获取未签名内容的结果。
| 属性 | 类型 | 描述 |
|---|---|---|
| Success | bool |
true 表示操作成功完成并已识别未签名内容(或文档没有签名)。 |
| UnsignedContent | UnsignedContentAbsorber.UnsignedContent |
一个对象,包含未被签名覆盖的检测到的页面、表单字段、XForm 和批注的集合。 |
| Message | string |
描述结果的文本信息。 |
| Coverage | SignaturesCoverage |
签名的覆盖级别:Undefined、EntirelySigned、PartiallySigned。 |
UnsignedContentAbsorber.UnsignedContent一个容器,保存所有未被数字签名 覆盖 的 PDF 文档元素。此类在 Result 中使用,并提供对检测对象的便捷访问。
| 属性 | 类型 | 描述 |
|---|---|---|
| Pages | List<Page> |
一个页面列表,其内容未被签名覆盖(或在签名后被修改)。如果页面被视为已修改,则其 XForm 不会被检查,也不会出现在 XForms 列表中。 |
| Forms | List<WidgetAnnotation> |
一个表单字段列表(文本字段、复选框等),这些字段在没有签名的情况下被添加或修改。 |
| XForms | Dictionary<int, XForm> |
一个字典,键为页码,值为签名后被修改的 XForm 对象。 |
| Annotations | Dictionary<int, Annotation> |
一个批注字典,键为页码,值为在没有签名的情况下被修改的批注。 |
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.