С ростом популярности обмена документами в электронном виде тема защиты их от подделки становится все более важной. На прошлой неделе я писал о добавлении в PDF документ цифровой подписи с использованием Foxit Quick PDF Library. Сегодня хочу рассказать о возможности цифровой подписи PDF документов, созданных с использованием генератора отчетов FastReport.
В выпущенном этой весной FastReport VCL 2021 появился новый объект "Цифровая подпись" (TfrxDigitalSignatureView). Он позволяет добавить цифровую подпись в документы формата PDF, которые были созданы экспортом из FastReport. Для подписи используется сертификат, хранящийся в файле формата PKCS#12 (PFX).
Создадим в FastReport небольшой шаблон отчета и добавим в него объект TfrxDigitalSignature. В инспекторе объектов отчета у него всего две настройки, которые связанны с цифровой подписью:
Для первого релиза функции цифровой подписи PDF документов в FastReport весьма неплохо. Разработчикам осталось совсем немного "обработать ее напильником".
В выпущенном этой весной FastReport VCL 2021 появился новый объект "Цифровая подпись" (TfrxDigitalSignatureView). Он позволяет добавить цифровую подпись в документы формата PDF, которые были созданы экспортом из FastReport. Для подписи используется сертификат, хранящийся в файле формата PKCS#12 (PFX).
Создадим в FastReport небольшой шаблон отчета и добавим в него объект TfrxDigitalSignature. В инспекторе объектов отчета у него всего две настройки, которые связанны с цифровой подписью:
- Kind – тип цифровой подписи (skVisible, skInvisible, skEmpty).
- Picture – изображение для видимой цифровой подписи.
- В модуле frxrcExports.pas поменяем '<StrRes Name="8725" Text="Save the password"/>' на '<StrRes Name="8725" Text=" Signature properties "/>'.
- В модуле frxExportPDFDialog.dfm свойству PasswordChar объекта CertificatePasswordE присвоим '*'.
program frSignPDF; {$APPTYPE CONSOLE} uses System.SysUtils, frxClass, frxExportPDF; procedure ExportSignPDF(const sPfxFileName, sPfxPassword: String); var frxReport: TfrxReport; frxPDFExport: TfrxPDFExport; begin frxReport := TfrxReport.Create(nil); try frxReport.ShowProgress := False; if frxReport.LoadFromFile('test.fr3') and frxReport.PrepareReport then begin frxPDFExport := TfrxPDFExport.Create(nil); try frxPDFExport.ShowDialog := False; frxPDFExport.ShowProgress := False; frxPDFExport.EmbeddedFonts := False; frxPDFExport.Quality := 100; // Параметры цифровой подписи // местонахождение frxPDFExport.DigitalSignLocation := 'Belarus'; // причина подписания frxPDFExport.DigitalSignReason := 'Тестирование подписи FastReport'; // контактная информация frxPDFExport.DigitalSignContactInfo := 'https://it-blackcat.blogspot.com'; // файл сертификата frxPDFExport.DigitalSignCertificatePath := sPfxFileName; // пароль сертификата frxPDFExport.DigitalSignCertificatePassword := sPfxPassword; frxPDFExport.FileName := 'FastReport - Signed PDF.pdf'; frxReport.Export(frxPDFExport); finally frxPDFExport.Free; end; end; finally frxReport.Free end; end; begin ReportMemoryLeaksOnShutdown := True; try ExportSignPDF('test.pfx', 'пароль сертификата') except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.Рассмотрим подробнее результаты экспорта в PDF-файл для каждого типа цифровой подписи.
- Kind = skVisible – видимая цифровая подпись. Для этого вида подписи главное не забыть загрузить в свойство Picture красивую картинку.
- Kind = skInvisible – не видимая цифровая подпись. Думаю, что для этого варианта объект TfrxDigitalSignature в шаблоне можно сделать не обязательным, а в TfrxPDFExport добавить метод запускающий функцию создания подписи и на диалог frxExportPDFDialog добавить CheckBox связанный с ее вызовом. В результате можно было бы подписывать любой отчет без внесения изменений в его шаблон.
- Kind = skEmpty – цифровая подпись без указания сертификата. В этом случае в PDF документе создается "не подписанное поле подписи". Если по нему кликнуть при просмотре, то откроется список сертификатов, которые доступны пользователю для подписи PDF документа.
Для первого релиза функции цифровой подписи PDF документов в FastReport весьма неплохо. Разработчикам осталось совсем немного "обработать ее напильником".
Комментариев нет:
Отправить комментарий