Как создать файл в 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 принят в качестве внутреннего стандарта технической документации? Мы узнали это от наших клиентов.

VCL Экспорты Lazarus FastReport Delphi RTF VCL Экспорты Lazarus FastReport Delphi RTF
20 февраля 2025

Использование матричных принтеров для печати чеков

В этой статье мы рассмотрим, как интегрировать матричный принтер в процесс создания и вывода отчетов с использованием FastReport .NET.
17 февраля 2025

Добавление новых пользователей в МоиОтчеты Облако

В Business-редакции сервиса МоиОтчеты Облако можно добавлять пользователей в одно рабочее пространство для одновременной совместной работы.
10 февраля 2025

Как попробовать FastReport .NET WEB перед покупкой

Протестировав WEB пак перед покупкой, вы сможете сделать осознанный выбор: подходит ли вам FastReport .NET для ваших задач.