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 поддерживает возможность цифровой подписи PDF‑файлов с помощью класса SignatureField, и при подписании документа можно также задать изображение для SignatureAppearance. Теперь этот API предоставляет возможность извлекать информацию о подписи, а также изображение, связанное с полем подписи.
Для извлечения информации о подписи мы добавили метод ExtractImage в класс SignatureField. Посмотрите следующий фрагмент кода, демонстрирующий шаги по извлечению изображения из объекта 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 поддерживает возможность цифровой подписи PDF‑файлов с помощью класса SignatureField. В настоящее время мы можем определять действительность сертификата, но не можем извлечь весь сертификат. Извлекаемая информация включает открытый ключ, отпечаток, издателя и т.д.
Для извлечения информации о подписи мы добавили метод ExtractCertificate в класс SignatureField. Посмотрите следующий фрагмент кода, демонстрирующий шаги по извлечению сертификата из объекта 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);
}
}
}
}
}
Вы можете использовать метод PdfFileSignature.TryExtractCertificate для извлечения потока сертификата или объекта X509Certificate2.
Вы можете получить информацию о алгоритмах подписи документа.
// 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.