Продолжаем рассказывать о возможностях экспорта из 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 – гарантированная возможность воспроизводить документ через некоторое количество лет в том же виде. В первую очередь обеспечить это требование позволяет самодостаточность документа. То есть документ должен содержать все нужные данные (текст, изображения растровые и векторные, шрифты, данные о цвете) внутри себя и не иметь внешних ссылок.
Давайте рассмотрим по порядку что должно быть в документе и чего не должно быть.
Запрещается:
Предписывается:
Таким образом мы получаем целостный самодостаточный документ, который не зависит от внешних данных. В любой момент вы сможете открыть такой документ стандартной программой-просмотрщиком. Гарантированное воспроизведение документа также обеспечивается международным стандартом.
Документ PDF/A будет иметь немного большие размеры по сравнению с PDF, это обусловлено наличием всех данных внутри него.
После создания шаблона переходим в режим предпросмотра готового отчёта. В левом верхнем углу находим экспорт в PDF.
Рассмотрим стандарты PDF/A, доступные в FastReport VCL:
Соответствие уровню 1B требует только соблюдения стандартов, необходимых для надежного воспроизведения внешнего вида документа, в то время как соответствие уровню 1A включает в себя все требования уровня 1B в дополнение к функциям, предназначенным для улучшения доступности документа.
Дополнительные требования к уровню 1A:
Соответствие уровня A было предназначено для повышения доступности соответствующих файлов для пользователей с ограниченными физическими возможностями, позволяя вспомогательному программному обеспечению, такому как программы чтения с экрана, более точно извлекать и интерпретировать содержимое файла.
В стандарт 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 отличается от PDF/A-2 одной важной особенностью. Поддержка встроенных файлов. Причем это могут быть не только другие PDF/A (поддерживается в PDF/A-2), но и любой другой файл. Это имеет важное значение для архивирования.
Как и PDF/A-2, стандарт PDF/A-3 определяет уровни соответствия:
В PDF/А-3 файла, любые вложенные файлы должны рассматриваться как «не архивные». Иными словами, внедренный файл считается временным и не стоит его рассматривать как файл для долгосрочного хранения. Только основного содержимого PDF документа предназначено для долгого хранения.
Итак, давайте все же рассмотрим на примере экспорт по стандарту PDF/A. Перед нами появляется окно настроек экспорта. Переходим на вкладку «Опции». Именно здесь мы можем выбрать стандарт PDF/A. Обратите внимание, что в выпадающем списке доступны 4 стандарта: PDF/A-2a, PDF/A-2b, PDF/A-3a и PDF/A-3b. Здесь нет PDF/A-1, так как он считается устаревшим.
Обратите внимание, когда мы выбрали опцию 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, производитель документа.
Безопасность - защита паролем документа от открытия (используется RC4). Возможность установить запрет на печать документа, изменение документа, копирование текста или графики, добавление или изменение текстовых заметок.
Настройка просмотрщика PDF в момент открытия документа: скрыть панель инструментов, скрыть меню, скрыть окно пользовательского интерфейса, распахнуть окно просмотра, центрировать окно, растянуть под размер печати. Обычно при экспорте используются параметры, выставленные разработчиками по умолчанию.
В этом разделе находится информация о цифровой подписи. Чтобы не повторять информацию оставлю ссылку на статью про эту функцию и о том, как её настроить. Ссылка на материал.
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 уже много лет прекрасно справляется с этой задачей и будет продолжать развиваться в соответствии с нуждами пользователей.