Работаем с PDF/A из дизайнера FastReport VCL и Delphi

19.10.2022

Работаем с PDF/A из дизайнера FastReport VCL и Delphi

Продолжаем рассказывать о возможностях экспорта из FastReport VCL. С каждым обновлением команда разработки добавляет множество новых и интересных функций. Сегодня мы решили напомнить вам о формате экспорта, который был добавлен ещё в 2017 году. Речь пойдёт о PDF/A и об его особенностях.

Всем известный формат документов PDF (Portable Document Format) появился достаточно давно и заслуженно пользуется популярностью. Ведь вы можете создавать документы и открывать их на любой платформе будь то Windows, Linux, iOS и другие. Это преимущество способствует использованию PDF в качестве архивов документов. И все же не все документы подходят для архивов. Например, ваш документ содержит ссылки, использует специфические шрифты (которые не добавлены в сам документ), или использует мультимедиа данные. Такой документ нельзя назвать самодостаточным.

Специально для хранения документов в архивах был разработан стандарт PDF/A. Он также, как и обычный PDF сертифицирован (стандарт ISO 19005-1:2005). В чем же отличие формата PDF и PDF/A?

Главное требование, предъявляемое к формату PDF/A – гарантированная возможность воспроизводить документ через некоторое количество лет в том же виде. В первую очередь обеспечить это требование позволяет самодостаточность документа. То есть документ должен содержать все нужные данные (текст, изображения растровые и векторные, шрифты, данные о цвете) внутри себя и не иметь внешних ссылок.

Давайте рассмотрим по порядку что должно быть в документе и чего не должно быть.

Запрещается:

  • вызывать исполняемые файлы из кода javascript;
  • использовать аудио и видео контент;
  • вставлять ссылки на внешние источники;
  • шифровать документ.

Предписывается:

  • внедрять в документ шрифты;
  • использовать данные о цвете, определяемые независимым от устройства способом.

Таким образом мы получаем целостный самодостаточный документ, который не зависит от внешних данных. В любой момент вы сможете открыть такой документ стандартной программой-просмотрщиком. Гарантированное воспроизведение документа также обеспечивается международным стандартом.

Документ PDF/A будет иметь немного большие размеры по сравнению с PDF, это обусловлено наличием всех данных внутри него.

После создания шаблона переходим в режим предпросмотра готового отчёта. В левом верхнем углу находим экспорт в PDF.

Экспорт в PDF

 

Рассмотрим стандарты PDF/A, доступные в FastReport VCL:

Экспорт в PDF/A

 

Стандарт PDF/A-1a и PDF/A-1b (ISO 19005-1)

Соответствие уровню 1B требует только соблюдения стандартов, необходимых для надежного воспроизведения внешнего вида документа, в то время как соответствие уровню 1A включает в себя все требования уровня 1B в дополнение к функциям, предназначенным для улучшения доступности документа.

Дополнительные требования к уровню 1A:

  • Спецификация языка.
  • Иерархическая структура документа.
  • Помеченный текст охватывает и описательный текст для изображений и символов.
  • Преобразование символов в Unicode.

Соответствие уровня A было предназначено для повышения доступности соответствующих файлов для пользователей с ограниченными физическими возможностями, позволяя вспомогательному программному обеспечению, такому как программы чтения с экрана, более точно извлекать и интерпретировать содержимое файла.

 

Стандарт PDF/A-2 (ISO 19005-2)

В стандарт PDF/A-2 добавлены некоторые функции, которые появились в PDF 1.5, 1.6, 1.7. PDF/A-2 имеет обратную совместимость с PDF/A -1, то есть все документы стандарта PDF / A-1 должны быть совместимы с PDF/A-2. Однако PDF/A-2 файлы не обязательно будут совместимы с PDF/A-1.

PDF / A-2 основан на PDF 1.7 (как определено в ISO 32000-1), который поддерживает ряд усовершенствований в документообороте, такие как сжатие JPEG2000, эффекты прозрачности и слоев, вложение OpenType шрифтов, а также положения для цифровых подписей в соответствии со стандартом подписи PDF Advanced Electronic.

PDF / A-2 также позволяет архивирование комплектов документов в виде отдельных документов в одном файле.

PDF/A-2 имеет следующие уровни соответствия:
- PDF / A-2a удовлетворяет всем требованиям в спецификации ISO 19005-2;
- PDF / A-2b более низкий уровень соответствия, охватывающий требование стандарта к внешнему виду документа, а не его структурные и семантические свойства.

 

Стандарт PDF/A-3 (ISO 19005-3)

PDF/A-3 отличается от PDF/A-2 одной важной особенностью. Поддержка встроенных файлов. Причем это могут быть не только другие PDF/A (поддерживается в PDF/A-2), но и любой другой файл. Это имеет важное значение для архивирования.

Как и PDF/A-2, стандарт PDF/A-3 определяет уровни соответствия:

  • PDF/A-3a PDF/а-3А удовлетворяет всем требованиям спецификации стандарта ISO 19005-3.
  • PDF/A-3b соответствует минимальным требованиям необходимым для гарантированного отображения документа в первоначальном виде при долгом хранении.

В PDF/А-3 файла, любые вложенные файлы должны рассматриваться как «не архивные». Иными словами, внедренный файл считается временным и не стоит его рассматривать как файл для долгосрочного хранения. Только основного содержимого PDF документа предназначено для долгого хранения.

Итак, давайте все же рассмотрим на примере экспорт по стандарту PDF/A. Перед нами появляется окно настроек экспорта. Переходим на вкладку «Опции». Именно здесь мы можем выбрать стандарт PDF/A. Обратите внимание, что в выпадающем списке доступны 4 стандарта: PDF/A-2a, PDF/A-2b, PDF/A-3a и PDF/A-3b. Здесь нет PDF/A-1, так как он считается устаревшим.

Экспорт в PDF

 

Обратите внимание, когда мы выбрали опцию PDF/A, встроенные шрифты перестали быть доступны для редактирования. Теперь шрифты встроены по умолчанию. Это соответствует требованиям стандарта.

Пробежимся по всем свойствам экспорта.

Page range – выбор страниц нашего документа, которые будут экспортированы в PDF.

PDF Standard – выбор спецификации PDF (обычный или PDF/A).

PDF Version – сейчас будет недоступно, так как речь идёт о PDF/A, но при обычной спецификации тут будут доступны версии PDF экспорта от 1.4 до 1.7.

Compressed – свойство, которое определяет необходимость сжатия данных отчёта.

Embedded fonts – это свойство будет отключено в PDF/A, так как стандарт не поддерживает использование каких-либо шрифтов.

Background – позволяет пользователю сделать фон для своего отчёта без подложки.

Print optimized - PDF можно оптимизировать для печати, где качество изображений будет лучше, но размер также станет больше.

Outline – свойство для включения или выключения отрисовки контура.

Transparency – свойство отвечает за отображение прозрачности у объектов.

Экспорт в PDF

 

Это раздел со служебной информацией, которая будет добавлена в PDF-файл: название, автор, тема, ключевые слова (вы можете выкладывать PDF в веб, они отлично индексируются), средство создания PDF, производитель документа.

Экспорт в PDF

 

Безопасность - защита паролем документа от открытия (используется RC4). Возможность установить запрет на печать документа, изменение документа, копирование текста или графики, добавление или изменение текстовых заметок.

Экспорт в PDF

 

Настройка просмотрщика PDF в момент открытия документа: скрыть панель инструментов, скрыть меню, скрыть окно пользовательского интерфейса, распахнуть окно просмотра, центрировать окно, растянуть под размер печати. Обычно при экспорте используются параметры, выставленные разработчиками по умолчанию.

Экспорт в PDF

 

В этом разделе находится информация о цифровой подписи. Чтобы не повторять информацию оставлю ссылку на статью про эту функцию и о том, как её настроить. Ссылка на материал.


Как создать PDF/A из кода Delphi или Lazarus

procedure TForm1.Button1Click(Sender: TObject);
begin
 {Формируем отчёт. Перед экспортом отчёт необходимо обязательно сформировать}
 frxReport1.PrepareReport();
 {Устанавливаем диапазон экспортируемых страниц. По умолчанию экспортируются все страницы сформированного отчёта}
 frxPDFExport1.PageNumbers := '2-3';
 {Устанавливаем стандарт PDF TPDFStandard = (psNone, psPDFA_1a, psPDFA_1b, psPDFA_2a, psPDFA_2b, psPDFA_3a, psPDFA_3b);} 
 {Требуется добавление модуля frxExportPDFHelpers в список uses: uses frxExportPDFHelpers;}
 frxPDFExport1.PDFStandard := psNone;
 {Для PDFStandard = psNone можно установить версию PDF стандарта TPDFVersion = (pv14, pv15, pv16, pv17);} 
 {Требуется добавление модуля frxExportPDFHelpers в список uses: uses frxExportPDFHelpers;}
 frxPDFExport1.PDFVersion := pv17;
 {Для меньшего размера файла можно установить сжатие}
 frxPDFExport1.Compressed := True;
 {Устанавливаем, нужно ли встраивать шрифты в результирующий документ.} 
 {Встраивание шрифтов значительно увеличивает размер результирующего документа}
 frxPDFExport1.EmbeddedFonts := False;
 {Устанавливаем, нужно ли экспортировать фоновую картинку страницы}
 frxPDFExport1.Background := True;
 {Отключаем экспорт объектов с оптимизацией для печати. С включённой опцией изображения будут качественными,}
 {но будут больше в 9 раз по объёму}
 frxPDFExport1.PrintOptimized := False;
 {Устанавливаем, будет ли результирующий PDF содержать выносное оглавление, как в исходном отчёте}
 frxPDFExport1.Outline := False;
 {Нужно ли экспортировать изображения с прозрачностью}
 frxPDFExport1.Transparency := True;
 {Можно установить требуемое DPI для изображений.}
 {Включение этой опции отключает опцию SaveOriginalImages, которая позволяет сохранять изображения в исходном виде}
 frxPDFExport1.PictureDPI := 150;
 {Устанавливаем степень сжатия растровых картинок}
 frxPDFExport1.Quality := 95;
 {Устанавливаем, нужно ли открывать результирующий файл после экспорта}
 frxPDFExport1.OpenAfterExport := False;
 {Устанавливаем, нужно ли отображать прогресс экспорта (показывать, какая страница в данный момент экспортируется)}
 frxPDFExport1.ShowProgress := False;
 {Устанавливаем, нужно ли отображать окно диалога с настройками фильтра экспорта}
 frxPDFExport1.ShowDialog := False;
 {Устанавливаем имя результирующего файла. Обратите внимание на то,}
 {что если не установить имя файла и отключить показ диалогового окна фильтра экспорта,}
 {то всё равно будет отображён диалог выбора имени файла}
 frxPDFExport1.FileName := 'C:\Output\test.pdf';
 {Заполняем соответствующие поля вкладки Information}
 frxPDFExport1.Title := 'Your Title';
 frxPDFExport1.Author := 'Your Name';
 frxPDFExport1.Subject := 'Your Subject';
 frxPDFExport1.Keywords := 'Your Keywords';
 frxPDFExport1.Creator := 'Creator Name';
 frxPDFExport1.Producer := 'Producer Name';
 {Заполняем соответствующие поля вкладки Security}
 frxPDFExport1.UserPassword := 'User Password';
 frxPDFExport1.OwnerPassword := 'Owner Password';
 frxPDFExport1.ProtectionFlags := [ePrint, eModify, eCopy, eAnnot];
 {Устанавливаем настройки просмотровщика (вкладка Viewer)}
 frxPDFExport1.HideToolbar := False;
 frxPDFExport1.HideMenubar := False;
 frxPDFExport1.HideWindowUI := False;
 frxPDFExport1.FitWindow := False;
 frxPDFExport1.CenterWindow := False;
 frxPDFExport1.PrintScaling := False;
 {Экспортируем отчёт}
 frxReport1.Export(frxPDFExport1);
end;

Подведём итоги. PDF – является открытым стандартом, доступным всем разработчикам программного обеспечения. Он был создан специально для того, чтобы любые данные выглядели абсолютно одинаково независимо от используемой программы, операционной системы, установленных шрифтов и тому подобное. FastReport VCL уже много лет прекрасно справляется с этой задачей и будет продолжать развиваться в соответствии с нуждами пользователей.

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.