Без электронного документооборота уже сложно представить нашу жизнь. Удобство таких документов это конечно же они не портятся с течением времени, их сложнее потерять, легко хранить и быстро передавать на любые расстояния. Но как мы все знаем, в силу вступает лишь тот документ, что был подписан.
Электронные подписи – шифры, гарантирующие уникальность и неповторимость, позволяющие однозначно установить авторство и защитить от изменения документа.
Но если подписывать каждый сгенерированный файл 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.