Подпись файлов цифровой подписью с помощью 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 VCL Lazarus Lazarus FastReport FastReport PDF PDF Delphi Delphi
21 апреля 2025

Работа с компонентом TfrShellTreeView в FastReport VCL

В данной статье мы рассмотрим компонент TfrShellTreeView. Он предназначен для отображения элементов файловой системы и частично является аналогом компонентов TDirectoryListBox, TDirectoryOutline и TShellTreeView.
21 апреля 2025

Работа с форматами XML и JSON в FastScript

В этой статье мы подробнее рассмотрим, как работать с JSON и XML в FastReport, увидим какие в них есть свойства и методы, а также построим отчеты из кода со скриптами.
21 апреля 2025

Как работают RFID-метки в FastReport VCL

В этой статье мы рассмотрим принцип работы RFID-меток с новым объектом TfrxDeviceCommand в FastReport VCL с релизом 2025.2.