Популярный вопрос – как отправить свой документ из Delphi-приложения в RTF? RTF - формат популярный, и если нет Microsoft Word, то можно использовать для него WordPad. Редактор по умолчанию в Mac OS X — TextEdit, также поддерживает RTF. Большинство текстовых редакторов в том или виде поддерживают RTF.
Rich Text Format (RTF) – это продвинутый текстовый формат авторства Microsoft 1982 года. Частенько используется в электронных книгах, реже в документах. Изначально целью такового формата было создать удобный файл для работы с книгами и документами. Это удалось сделать с помощью встроенных мета-тегов, позволяющих быстро перемещаться по документу.
Формат достаточно доступный для воспроизведения. Более того, в составе Windows обычно идёт DLL для рендеринга и отображения RTF.
Есть великое множество средств сохранения текста в 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 сущностей - не просто форматированный текст, таблиц, но и иллюстрации, штрих-коды, графики, карты, индикаторы, графические примитивы и т.д.
Итак - собираем проект, внедрив в него FastReport c компонентом “экспорт в RTF”, делаем отчёт, запускаем, нажимаем в предпросмотре “сохранить” и вызываем экспорт из предпросмотра (ниже покажу, как реализовать запись в RTF с помощью кода Delphi). Появляется окошко настроек экспорта в RTF.
Какие страницы нашего документа отправить в Excel, диапазон или только определённые страницы.
Настройки экспорта – включать ли картинки-изображения в RTF, получить большее визуальное соответствие с начальным вариантом (WYSIWYG), переносить ли из отчёта разрывы страниц , а также есть возможность повторять наименования столбцов на каждом листе.
RTF формат текстовый, постраничный, а где страницы, там колонтитулы.
Экспорт нижнего и верхнего колонтитулов (Page header и Page footer) в итоговом документе мы можем настроить (экспортировать в виде текста, в виде колонтитулов или же полностью убрать заголовки/подвалы страниц).
Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта программой, которая стоит по умолчанию для открытия RTF-документов.
Можно традиционно указать, куда отправить RTF-файл (локально в файл, на электронную почту, FTP или поместить в облако).
Сохранение в 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 принят в качестве внутреннего стандарта технической документации? Мы узнали это от наших клиентов.