Подпись файлов цифровой подписью с помощью FastReport VCL

12.12.2022

Подпись файлов цифровой подписью с помощью FastReport VCL

Без электронного документооборота уже сложно представить нашу жизнь. Удобство таких документов это конечно же они не портятся с течением времени, их сложнее потерять, легко хранить и быстро передавать на любые расстояния. Но как мы все знаем, в силу вступает лишь тот документ, что был подписан.

Электронные подписи – шифры, гарантирующие уникальность и неповторимость, позволяющие однозначно установить авторство и защитить от изменения документа.

Но если подписывать каждый сгенерированный файл PDF, то это может занять много времени. А что делать если у вас генерируется тысяча и более файлов, подписывать их вручную? Конечно же нет. FastReport VCL умеет сам подписывать сгенерированные файлы вашей подписью. Далее мы разберём пример реализации цифровой подписи.

Для наглядности используем маленькое приложение, которое экспортирует файл в PDF, а после подписывает его.

Delphi
procedure TForm1.Button1Click(Sender: TObject);
const
 FR3FileName = 'Signatures.fr3';
var
 PDFExport: TfrxPDFExport;
 Report: TfrxReport;
begin
 Report := TfrxReport.Create(nil);
 try
 Report.LoadFromFile(FR3FileName);
 Report.PrepareReport; 
// загружаем и готовим отчет
 PDFExport := TfrxPDFExport.Create(nil);
 try
 PDFExport.Report := Report;
 PDFExport.ShowDialog := False;
 PDFExport.FileName := ExtractFileName(FR3FileName) + '.pdf';
 Report.Export(PDFExport); 
// экспортируем отчет
 SetInfo(PDFExport); 
// подписываем сгенерированный PDF файл
 finally
 PDFExport.Free;
 end;
 finally
 Report.Free;
 end;
end;
 
procedure TForm1.SetInfo(PDFExport: TfrxPDFExport);
var
 Lookup: TCertificateStoreLookup;
 FS: TfrxFileSignature;
 FSO: Integer;
begin
 Lookup := TCertificateStoreLookup.Create;
 Lookup.IgnoreCase := true;
 Lookup.Subject := 'test'; 
// имя сертификата
 FSO := FileSignatureOptions(
 true, // Detached = true подпись в отдельном файле
 false, // Chain = false цепочка сертификата
 true, // OnlyGOST= true сертификат ГОСТ
 true, // DebugLog = true информация при отладке
 false); // PFX = false включается, если задан не ГОСТ сертификат
 
 FS := TfrxFileSignature.Create(
 Lookup,
 PDFExport.FileName, // Название PDF файла
 PDFExport.FileName + '.sig', // название сгенерированной подписи
 '',
 FSO);
 
 FS.Sign;
 FS.Free;
 Lookup.Free;
end;

После написания программы перейдем к ее запуску.

Окно тестовой программы

После запуска нажимаем на кнопку, если КриптоПро потребует ввести пароль, то вводим его. Затем получаем подписанный PDF файл с файлом подписи:

Полученные файлы после успешного подписания документа

Стоит проверить корректность подписания файла. Для этого переходим на сайт https://crypto.kontur.ru/verify.

Следующим шагом добавляем наш сгенерированный pdf файл и его подпись.

Проверка подписи документа

Этот скриншот означает, что PDF файл прошел проверку на подпись.

Таким простым и незамысловатым способом мы получили корректно экспортированный и подписанный PDF файл с помощью FastReport VCL.

VCL Lazarus FastReport PDF Delphi VCL Lazarus FastReport PDF Delphi
11 марта 2025

Как использовать FastReport .NET Avalonia на Fedora Workstation с протоколом Wayland

В данной статье мы разберем, как запустить FastReport .NET Avalonia на операционной системе «Fedora Workstation 39» с протоколом Wayland.
7 марта 2025

Как создать QR-код с картинкой в FastReport .NET

В статье разобрались как вставлять картинку в QR Code из дизайнера отчётов FastReport .NET всего за пару кликов.
20 февраля 2025

Использование матричных принтеров для печати чеков

В этой статье мы рассмотрим, как интегрировать матричный принтер в процесс создания и вывода отчетов с использованием FastReport .NET.