TPdfLifecycleActionPolicy = (lapDisabled, lapManual, lapAutomatic);
TPdfDocumentLifecycleAction = (dlaJavaScript, dlaOpen, dlaWillClose, dlaWillSave, dlaDidSave, dlaWillPrint, dlaDidPrint);
TPdfPageLifecycleAction = (plaOpen, plaClose);
property LifecycleActionPolicy: TPdfLifecycleActionPolicy; // default lapAutomatic
lapDisabled блокирует как автоматическое, так и явное выполнение действий жизненного цикла
lapManual подавляет автоматические действия, но разрешает оба явных метода выполнения
lapAutomatic сохраняет совместимое автоматическое поведение — JavaScript документа, открытие и закрытие документа, открытие и закрытие страницы — и при этом допускает явный запуск
Автоматический режим не охватывает операции сохранения и печати, поскольку внутренние снимки и сохранения при конвертации не должны неожиданно запускать скрипты документа; вызывайте явный метод документа на границах рабочего процесса, контролируемых хост-приложением
function ExecuteDocumentLifecycleAction(Action: TPdfDocumentLifecycleAction; out ErrorMessage: string): Boolean;
dlaJavaScript запускает действия уровня документа из дерева имён JavaScript, а dlaOpen — действие открытия из каталога
dlaWillClose, dlaWillSave, dlaDidSave, dlaWillPrint и dlaDidPrint диспетчеризуют соответствующее дополнительное действие документа
Метод возвращает False с непустым ErrorMessage, когда политика блокирует выполнение, среда заполнения форм недоступна или обратный вызов возбуждает исключение
function ExecutePageLifecycleAction(PageNumber: Integer; Action: TPdfPageLifecycleAction; out ErrorMessage: string): Boolean;
PageNumber отсчитывается с единицы и должен указывать на страницу активного документа
Текущая страница повторно использует свой загруженный нативный дескриптор; другая страница временно открывается, регистрируется в среде форм, обрабатывается, снимается с регистрации и закрывается без изменения TPdf.PageNumber
Сбои загрузки, регистрации, действия, очистки и закрытия изолируются в возвращаемом значении и ErrorMessage
var
ErrorMessage: string;
begin
Pdf.LifecycleActionPolicy := lapManual;
if not Pdf.ExecuteDocumentLifecycleAction(dlaWillSave, ErrorMessage) then
raise Exception.Create(ErrorMessage);
try
Pdf.SaveAs(TargetFileName);
finally
Pdf.ExecuteDocumentLifecycleAction(dlaDidSave, ErrorMessage);
end;
end;
Действия жизненного цикла могут вызывать JavaScript документа, именованные действия, URI-обратные вызовы и другие службы хост-приложения, настроенные на TPdf
Используйте lapDisabled для недоверенных документов, которые не должны выполнять действия никогда, и lapManual, когда приложению нужна явная граница одобрения