function SaveAsPdfA(const FileName: string; Conformance: TPdfAConformance = pac1b): Boolean; overload;
function SaveAsPdfA(const FileName: string; const Options: TPdfASaveOptions): Boolean; overload;
SaveAsPdfA сначала выполняет обычный SaveAs, затем наслаивает incremental update поверх сохранённых байтов, повышающий файл до архива PDF/A (по умолчанию PDF/A-1b; ISO 19005-1 с Cor.1:2007). Постобработка внедряет в сохранённый поток четыре вещи:
pdfaid:part = 1, pdfaid:conformance = B), отображающий каждую запись Document Information Dictionary в её эквивалент XMP (Title → dc:title, Author → dc:creator, Subject → dc:description, Keywords → pdf:Keywords, Creator → xmp:CreatorTool, Producer → pdf:Producer, CreationDate → xmp:CreateDate, ModDate → xmp:ModifyDate), как требует ISO 19005-1 6.7.3, и встраивающий описание схемы расширения pdfaid, требуемое 6.7.8 / Cor.1TPdfASaveOptions.IccProfileData/ID в trailer (обязателен по ISO 19005-1 6.1.3). Если исходный PDF уже несёт файловый идентификатор, повторно используются существующие 16-байтовые постоянный и изменяемый ID; в противном случае детерминированный запасной 16-байтовый ID выводится из исходных байтовРезультат побайтово совпадает с выводом базового SaveAs до
конца исходного PDF; добавляется только incremental update.
Существующие программы чтения, не понимающие PDF/A, по-прежнему
отображают файл точно так же, как это сделал бы обычный SaveAs. Две
перегрузки различаются лишь способом передачи соответствия и параметров —
форма TPdfAConformance является сокращением для типичного случая
(pac1b); форма TPdfASaveOptions принимает
запись с полной поверхностью конфигурации, включая необязательные
переопределения Title, Author, Subject, Keywords, Creator, Producer,
CreationDate, ModDate, DocumentId и InstanceId. Пустые поля
заполняются автоматически из FPDF_GetMetaText /
FPDF_GetFileIdentifier, поэтому обычному вызывающему коду не
нужно задавать никакое поле, кроме Conformance
Значение Conformance выбирает целевой стандарт и
уровень. PDF/A-1 (ISO 19005-1) предлагает pac1b и
pac1a; PDF/A-2 (ISO 19005-2) и PDF/A-3 (ISO 19005-3) добавляют
уровни b, u и a как pac2b / pac2u /
pac2a и pac3b / pac3u /
pac3a. Внедряемые pdfaid:part (1, 2 или 3) и
pdfaid:conformance (A, B или U) следуют запрошенному значению,
тогда как OutputIntent сохраняет подтип GTS_PDFA1, который
ISO 19005-2 оставляет для каждой части. Поскольку постпроцессор не может
синтезировать логическую структуру, запрос уровня A
(pac1a / pac2a / pac3a)
автоматически понижается до соответствующего уровня B, если исходный документ
лишён структуры tagged PDF, требуемой этим уровнем — поэтому сохранённый
файл никогда не заявляет ложное соответствие уровню A
Возвращает True в случае успеха. Возвращает False,
если базовый SaveAs завершился ошибкой, если incremental update
не удалось присоединить (PDF слишком короткий, недопустимый trailer)
или если данные профиля ICC были переданы, но не прошли проверку
/Encrypt (внутри базовое сохранение выполняется с saRemoveSecurity)ValidatePdfA после сохранения, чтобы проверить результат и показать операторам оставшиеся проблемы
// Simple PDF/A-1b output using the bundled sRGB profile
if Pdf1.SaveAsPdfA('C:\Report.pdfa.pdf') then
ShowMessage('Saved PDF/A-1b');
// With a custom ICC profile
var
Opts: TPdfASaveOptions;
begin
Opts := Default(TPdfASaveOptions);
Opts.Conformance := pac1b;
Opts.IccProfileData := TFile.ReadAllBytes('C:\Profiles\Coated.icc');
Pdf1.SaveAsPdfA('C:\Report.cmyk.pdfa.pdf', Opts);
end;