function SaveAsPdfX(const FileName: string): Boolean; overload;
function SaveAsPdfX(const FileName: string; const Options: TPdfXSaveOptions): Boolean; overload;
SaveAsPdfX сначала выполняет обычный SaveAs, а затем поверх сохранённых байтов накладывает инкрементальное обновление для выбранного варианта обмена печатными данными PDF/X. Постобработка вписывает в сохранённый поток пять классов байтов:
pdfxid:GTS_PDFXVersion, плюс pdfxid:GTS_PDFXConformance для PDF/X-1a / PDF/X-3) плюс соответствующее описание pdfaExtension:schemas для пространства имён pdfxid и мостовые свойства Dublin Core / xmp / pdf для Title / Author / Producer / дат/GTS_PDFXVersion, опциональную /GTS_PDFXConformance (только PDF/X-1a / PDF/X-3; в PDF/X-4 запись устарела) и имя /Trapped (по умолчанию /False). Существующие записи Info (Title / Author / Subject / etc.) сохраняются/Metadata N 0 R и /OutputIntents [M 0 R]/Type /OutputIntent /S /GTS_PDFX и настроенными записями output-condition, ссылающимися на встроенный профиль ICC через /DestOutputProfileTrailer переписывается, чтобы добавить массив /ID. Вывод
остаётся побайтово идентичным результату базового SaveAs вплоть до конца
исходного PDF; дописывается только инкрементальное обновление. Разница
перегрузок только в том, как передаётся конфигурация:
форма только с именем файла берёт TPdfXSaveOptions.Default
(PDF/X-4 + sRGB + /Trapped /False) с автозаполнением
полей Info / DocumentId из FPDF_GetMetaText и
FPDF_GetFileIdentifier
Возвращает True после записи подготовленных байтов или False, если документ неактивен или базовое сохранение провалилось
Успешная сериализация не означает полного соответствия PDF/X
Для pxc1a IccProfileData должен содержать структурно корректный выходной профиль ICC v2 с классом устройства prtr, цветовым пространством данных CMYK, PCS Lab или XYZ и требуемыми двунаправленными LUT
Отсутствующие, RGB, обрезанные, неверно классифицированные или неподдерживаемые данные профиля дают EArgumentException; запасного варианта с sRGB для PDF/X-1a нет
Для PDF/X-1a значения OutputCondition, OutputConditionIdentifier и OutputIntentInfo, всё ещё равные встроенному значению по умолчанию sRGB IEC61966-2.1, заменяются описанием проверенного профиля
Если у профиля нет описания, задайте непустой, нестандартный OutputConditionIdentifier; он даст замещающую метку, иначе вызов бросит EArgumentException
Явно заданные вызывающим метки сохраняются
Сериализация и эти проверки профиля завершаются во временном хранилище сохранения до того, как целевой файл будет открыт для записи Поэтому существующая цель остаётся без изменений, если валидация профиля бросает исключение или базовое сохранение проваливается Это не гарантия атомарной замены файла: сбой ввода-вывода после открытия цели может оставить частичный вывод
saRemoveSecurity перед вписыванием маркеровOptions.Conformance, но принудить эти правила уровня контента не может. Подтверждайте через preflight
// Simple PDF/X-4 with bundled sRGB OutputIntent
if Pdf1.SaveAsPdfX('C:\AdProof.pdfx.pdf') then
ShowMessage('Saved PDF/X-4');
// PDF/X-1a with a custom CMYK ICC profile (e.g. FOGRA39)
var
Opts: TPdfXSaveOptions;
begin
Opts := TPdfXSaveOptions.Default;
Opts.Conformance := pxc1a;
Opts.IccProfileData := TFile.ReadAllBytes('C:\ICC\FOGRA39.icc');
Opts.OutputCondition := 'Coated FOGRA39 (ISO 12647-2:2004)';
Opts.OutputConditionIdentifier:= 'FOGRA39';
Opts.RegistryName := 'http://www.color.org';
Opts.Trapped := ptFalse;
Pdf1.SaveAsPdfX('C:\AdProof.cmyk.pdfx.pdf', Opts);
end;