Подскажите возможно ли в криптопро net добавить в документ pdf созданную ранее в криптопро отсоединенную подпись чтобы она корректно читалась и проверялась
с эти кодом подпись добавляется, но определяется некорректной
static void EmbedCadesSignatureWithStamp(string inputPdf, string outputPdf, string signatureFile, string stampImagePath)
{
using (FileStream outputStream = new FileStream(outputPdf, FileMode.Create))
using (PdfReader reader = new PdfReader(inputPdf))
{
PdfStamper stamper = PdfStamper.CreateSignature(reader, outputStream, '\0');
PdfSignatureAppearance appearance = stamper.SignatureAppearance;
//appearance.SetReason("Digitally signed via CAdES-BES");
// appearance.SetLocation("Company Name");
appearance.SetVisibleSignature(new Rectangle(50, 50, 250, 150), 1, "Signature1");
// Add an image as a signature stamp (if exists)
if (File.Exists(stampImagePath))
{
Image image = Image.GetInstance(stampImagePath);
appearance.Image = image;
appearance.ImageScale = -1; // Auto-scale image
}
else
{
// If no image, add text-based signature stamp
AddTextStamp(appearance, "Signed via CryptoPro (CAdES-BES)");
}
// Read the detached CAdES-BES signature
byte[] signatureBytes = File.ReadAllBytes(signatureFile);
// Apply precomputed CAdES-BES signature
IExternalSignatureContainer externalSignature = new PrecomputedCadesSignature(signatureBytes);
MakeSignature.SignExternalContainer(appearance, externalSignature, 8192);
}
}
// Custom method to add a text-based signature stamp
static void AddTextStamp(PdfSignatureAppearance appearance, string text)
{
appearance.Layer2Text = text;
appearance.Layer2Font = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);
}
}
// Class to attach precomputed CAdES-BES CryptoPro signature
public class PrecomputedCadesSignature : IExternalSignatureContainer
{
private readonly byte[] signature;
public PrecomputedCadesSignature(byte[] signature)
{
this.signature = signature;
}
PdfName filterName = new PdfName("CryptoPro PDF");
public void ModifySigningDictionary(PdfDictionary signDic)
{
signDic.Put(PdfName.FILTER, PdfName.ADOBE_PPKLITE);
signDic.Put(PdfName.SUBFILTER, PdfName.ETSI_CADES_DETACHED);
}
public byte[] Sign(Stream data)
{
return signature;
}
}
Отредактировано пользователем 13 февраля 2025 г. 15:10:44(UTC)
| Причина: Не указана