Как создать файл в RTF из Delphi / C++Builder / Lazarus?

17.06.2020

Популярный вопрос – как отправить свой документ из Delphi-приложения в RTF? RTF - формат популярный, и если нет Microsoft Word, то можно использовать для него WordPad. Редактор по умолчанию в Mac OS X — TextEdit, также поддерживает RTF. Большинство текстовых редакторов в том или виде поддерживают RTF.

Rich Text Format (RTF) – это продвинутый текстовый формат авторства Microsoft 1982 года. Частенько используется в электронных книгах, реже в документах. Изначально целью такового формата было создать удобный файл для работы с книгами и документами. Это удалось сделать с помощью встроенных мета-тегов, позволяющих быстро перемещаться по документу.

Формат достаточно доступный для воспроизведения. Более того, в составе Windows обычно идёт DLL для рендеринга и отображения RTF.

Три типовых способа сохранить RTF из Delphi и Lazarus

Есть великое множество средств сохранения текста в RTF из Delphi.
1. Вы можете сами формировать RTF. В википедии есть прелестный пример простого RTF-текста:

Сохранение в RTF пример из Wikipedia
1
2
3
4
5
6
{\rtf1
 Привет!
 \par
 {\i Это} некий
 отформатированный {\b текст}.\par
}

Согласитесь, очень просто выглядит, понятно и легко воспроизводится!

2. Для задач посложнее существуют специализированные конвертеры в RTF - часто с редактором, например от нашего партнёра и коллеги по цеху TRichView.

3. Ну и, с нашей точки зрения, наиболее правильный способ - FastReport! Ведь вам надо не просто “сделать какой-нибудь RTF” - обычно его надо получить с данными, объектами разными - и вот тут как-раз на выручку приходит множество поддерживаемых FastReport сущностей - не просто форматированный текст, таблиц, но и иллюстрации, штрих-коды, графики, карты, индикаторы, графические примитивы и т.д.

Создаём RTF в Delphi без единой строчки кода!

Итак - собираем проект, внедрив в него FastReport c компонентом “экспорт в RTF”, делаем отчёт, запускаем, нажимаем в предпросмотре “сохранить” и вызываем экспорт из предпросмотра (ниже покажу, как реализовать запись в RTF с помощью кода Delphi). Появляется окошко настроек экспорта в RTF.

настраиваем изображение и отображение RTF в Delphi и Lazarus  Настройки страниц RichText в Delphi и Lazarus

Какие страницы нашего документа отправить в Excel, диапазон или только определённые страницы.

Настройки экспорта – включать ли картинки-изображения в RTF, получить большее визуальное соответствие с начальным вариантом (WYSIWYG), переносить ли из отчёта разрывы страниц , а также есть возможность повторять наименования столбцов на каждом листе.

RTF формат текстовый, постраничный, а где страницы, там колонтитулы.

Экспорт нижнего и верхнего колонтитулов (Page header и Page footer) в итоговом документе мы можем настроить (экспортировать в виде текста, в виде колонтитулов или же полностью убрать заголовки/подвалы страниц).

Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта программой, которая стоит по умолчанию для открытия RTF-документов.

RTF параметры сохранения

Можно традиционно указать, куда отправить RTF-файл (локально в файл, на электронную почту, FTP или поместить в облако).

И вот обещанный код для сохранения в RTF сразу из Delphi / Lazarus

Сохранение в RTF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm1.Button1Click(Sender: TObject);
begin
 {Формируем отчёт. Перед экспортом отчёт необходимо обязательно сформировать}
 frxReport1.PrepareReport();
 {Устанавливаем диапазон экспортируемых страниц. По умолчанию экспортируются все страницы сформированного отчёта}
 frxRTFExport1.PageNumbers := '2-3';
 {Устанавливаем, нужно ли экспортировать изображения}
 frxRTFExport1.ExportPictures := True;
 {Устанавливаем, экспортировать ли разрывы страниц, чтобы страницы при печати соответствовали страницам сформированного отчёта}
 frxRTFExport1.ExportPageBreaks := True;
 {Устанавливаем, нужно ли формировать непрерывный документ с пропуском промежуточных заголовков и подвалов страниц.}
 frxRTFExport1.SuppressPageHeadersFooters := True;
 {Устанавливаем WYSIWYG}
 frxRTFExport1.Wysiwyg := True;
 {Устанавливаем режим экспорта заголовков/подвалов страниц
 hfText - в виде текста;
 hfPrint - в виде колонтитулов. SuppressPageHeadersFooters автоматически устанавливается в True;
 hfNone - пропускать}
 frxRTFExport1.HeaderFooterMode := hfText;
 {Устанавливаем, нужно ли открывать результирующий файл после экспорта}
 frxRTFExport1.OpenAfterExport := False;
 {Устанавливаем, нужно ли отображать прогресс экспорта (показывать, какая страница в данный момент экспортируется)}
 frxRTFExport1.ShowProgress := False;
 {Устанавливаем, нужно ли отображать окно диалога с настройками фильтра экспорта}
 frxRTFExport1.ShowDialog := False;
 {Устанавливаем имя результирующего файла.}
 {Обратите внимание на то, что если не установить имя файла и отключить показ диалогового окна фильтра экспорта,}
 {то всё равно будет отображён диалог выбора имени файла}
 frxRTFExport1.FileName := 'C:\Output\test.rtf';
 {Экспортируем отчёт}
 frxReport1.Export(frxRTFExport1);
end;

Хочу отметить, что этот способ позволяет записать полность в полноценный RTF документ, который изначально мог состоять из различных элементов, включая (но далеко не ограничиваясь) , собственно, RTF. На выходе получится аккуратно и красиво оформленный в соответствии со стандартом полноценный RTF-документ, который участками можно с этим форматированием копировать-вставлять в другие документы. Кстати, а вы знали, в некоторых инженерно-конструкторских компаниях RTF принят в качестве внутреннего стандарта технической документации? Мы узнали это от наших клиентов.

20 ноября 2024

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

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

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

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

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

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