Rich Text Format ( часто сокращенно RTF ) — это проприетарный [6] [7] [8] формат файла документа с опубликованной спецификацией, разработанный корпорацией Microsoft с 1987 по 2008 год для кросс-платформенного обмена документами с продуктами Microsoft. До 2008 года Microsoft опубликовала обновленные спецификации для RTF с основными изменениями версий Microsoft Word и Office .
Большинство текстовых процессоров способны читать и записывать некоторые версии RTF. [9] Существует несколько различных версий спецификации RTF; переносимость файлов будет зависеть от того, какая версия RTF используется. [7] [10]
RTF не следует путать с обогащенным текстом [11] или его предшественником Rich Text [12] [13] или с RFT-DCA (Revisable Format Text-Document Content Architecture) компании IBM , поскольку это разные спецификации.
Ричард Броди , Чарльз Симони и Дэвид Любберт, члены команды разработчиков Microsoft Word , разработали оригинальный RTF в середине-конце 1980-х годов. Первый ридер и писатель RTF был отправлен в 1987 году как часть Microsoft Word 3.0 для Macintosh , который реализовал спецификацию RTF версии 1.0. Все последующие выпуски Microsoft Word для Macintosh, а также все версии Windows, могут читать и писать в формате RTF.
Microsoft поддерживает RTF. Окончательная версия 1.9.1 вышла в 2008 году и реализовала функции Office 2007. Microsoft прекратила усовершенствования спецификации RTF, поэтому новые функции Word 2010 или более поздней версии не будут правильно сохраняться в RTF. [14] Microsoft не ожидает дальнейших обновлений RTF, но заявила о готовности рассмотреть редакционные и другие несущественные изменения спецификации RTF в течение соответствующего периода голосования по ISO/IEC 29500. [15]
Файлы RTF использовались для создания файлов справки Windows , хотя с тех пор они были заменены файлами справки Microsoft Compiled HTML .
Он программируется с использованием групп, обратной косой черты, управляющего слова и разделителя. Группы заключены в фигурные скобки ({}) и указывают, какие атрибуты следует применять к определенному тексту.
Обратная косая черта (\) вводит управляющее слово, которое является специально запрограммированной командой для RTF. Управляющие слова могут иметь определенные состояния, в которых они активны. Эти состояния представлены числами. Например,
\b0
\b1
\i0
\i1
\ul0
\ul1
\sub0
\sub1
\superscript0
\superscript1
Разделитель — это одно из трех:
В качестве примера приведем следующий код RTF:
{ \rtf 1 \ansi { \fonttbl\f 0 \fswiss Helvetica; } \f 0 \pard Это какой-то { \b жирный } текст. \par }
будет выглядеть следующим образом:
Это жирный текст.
Стандартный файл RTF может состоять только из 7-битных символов ASCII , но может использовать escape-последовательности для кодирования других символов. [31] Два escape-символа являются escape-последовательностями кодовой страницы и, начиная с RTF 1.5, escape-последовательностями Unicode . В escape-последовательности кодовой страницы две шестнадцатеричные цифры после обратной косой черты и апострофа пишущей машинки обозначают символ, взятый из кодовой страницы Windows. Например, если кодовая страница установлена на Windows-1256 , последовательность \'c8
будет кодировать арабскую букву bāʼ ب. Также можно указать «Набор символов» в преамбуле документа RTF и связать его с заголовком. Например, преамбула содержит текст \f3\fnil\fcharset128
, тогда в теле документа текст \f3\'bd\'f0
будет представлять кодовую точку 0xbd 0xf0
из набора символов 128 (что соответствует кодовой странице Shift-JIS ), которая кодирует «金».
Для экранирования Unicode \u
используется управляющее слово, за которым следует 16-битное целое число со знаком, которое соответствует номеру кодовой единицы Unicode UTF-16. Для программ без поддержки Unicode за ним должно следовать ближайшее представление этого символа в указанной кодовой странице. Например, \u1576?
даст арабскую букву bāʼ ب, но указывает, что старые программы, не поддерживающие Unicode, должны отображать ее как вопросительный знак.
Управляющее слово \uc0
может использоваться для указания того, что последующие escape-последовательности Unicode в текущей группе не определяют символ замены.
До версии спецификации RTF 1.5, выпущенной в 1997 году, RTF обрабатывал только 7-битные символы напрямую и 8-битные символы, закодированные как шестнадцатеричные (с использованием \'xx
). Однако, начиная с RTF 1.5, управляющие слова RTF обычно принимают 16-битные числа со знаком в качестве аргументов. Значения Unicode больше 32767 должны быть выражены как отрицательные числа. [25] Если символ Unicode находится за пределами BMP , он кодируется суррогатной парой. Поддержка Unicode была сделана из-за изменений в обработке текста в Microsoft Word — Microsoft Word 97 является частично поддерживающим Unicode приложением и обрабатывает текст с использованием 16-битной схемы кодировки символов Unicode . [25] Microsoft Word 2000 и более поздние версии являются приложениями с поддержкой Unicode, которые обрабатывают текст с использованием 16-битной схемы кодировки символов Unicode. [3]
Поскольку файлы RTF обычно представляют собой 7-битный текст ASCII , их можно легко передавать между операционными системами на базе ПК. Конвертеры, взаимодействующие с Microsoft Word для MS Windows или Macintosh, обычно ожидают передачи данных в виде 8-битных символов и двоичных данных, которые могут содержать любые 8-битные значения. [29]
RTF — это формат данных для сохранения и обмена документами, а не язык разметки ; он не предназначен для интуитивного и легкого набора текста. [33] [34] Тем не менее, в отличие от многих форматов обработки текста, код RTF может быть понятен человеку . Если файл RTF, содержащий в основном латинские символы без диакритических знаков , просмотреть как обычный текстовый файл, то лежащий в его основе текст ASCII можно прочитать, при условии, что автор сохранил лаконичное форматирование.
Когда был выпущен RTF, большинство текстовых процессоров использовали двоичные форматы файлов; например, Microsoft Word использовал формат файла .DOC . RTF был уникален своим простым управлением форматированием, которое позволяло программам, не поддерживающим RTF, таким как Microsoft Notepad, открывать и предоставлять читаемые файлы. Сегодня большинство текстовых процессоров перешли на форматы файлов на основе XML (Word перешел на формат файла .docx ). Несмотря на это, эти файлы содержат большой объем кода форматирования, поэтому часто в десять и более раз больше соответствующего обычного текста. [35] [33]
Чтобы RTF соответствовал стандарту, символы, не входящие в набор ASCII, должны быть экранированы. Таким образом, даже при кратком форматировании текст, в котором используются определенные тире и кавычки, менее разборчив. Латинские языки с большим количеством диакритических знаков особенно трудно читать в RTF, поскольку они приводят к таким заменам, как \'f1 для ñ и \'e9 для é . Нелатинские шрифты неразборчивы в RTF — например, \u21563 используется для吻. С самого начала RTF также поддерживал встроенные объекты Microsoft OLE и объекты подписчика Macintosh Edition Manager, которые не читаются человеком.
Большинство текстовых редакторов поддерживают либо импорт и экспорт формата RTF для некоторых спецификаций RTF, либо прямое редактирование, что делает его «общим» форматом между несовместимыми в противном случае текстовыми редакторами и операционными системами. Большинство приложений, которые читают файлы RTF, молча игнорируют неизвестные контрольные слова RTF. [36] Эти факторы способствуют его совместимости , хотя она все еще зависит от конкретной используемой версии RTF. [7] Существует несколько сознательно разработанных или случайно созданных диалектов RTF. [36]
RTF — это внутренний язык разметки, используемый Microsoft Word. [33] С 1987 года файлы RTF можно было передавать туда и обратно между многими старыми и новыми компьютерными системами (а теперь и через Интернет), несмотря на различия между операционными системами и их версиями. Это делает его полезным форматом для базовых форматированных текстовых документов, таких как инструкции по эксплуатации, резюме, письма и скромные информационные документы. Эти документы, как минимум, поддерживают форматирование текста жирным шрифтом, курсивом и подчеркиванием. Также обычно поддерживаются выравнивание текста по левому, центральному и правому краю, спецификация шрифта и поля документа.
Настройки шрифта и полей по умолчанию, предустановки стилей и другие функции различаются в зависимости от настроек программы по умолчанию. Также могут быть несовместимости между различными версиями RTF, например, между RTF 1.0 1987 и более поздними спецификациями или между RTF 1.0–1.4 и RTF 1.5+ в использовании символов Unicode. [37] [38] [39] И хотя RTF поддерживает метаданные, такие как заголовок и автор, не все реализации поддерживают это. Тем не менее, формат RTF достаточно последователен, чтобы считаться высокопортируемым и приемлемым для кроссплатформенного использования.
Объекты Microsoft Object Linking and Embedding (OLE) и объекты-подписчики Macintosh Edition Manager позволяют встраивать другие файлы в RTF, например, таблицы или диаграммы из приложения электронных таблиц. Однако, поскольку эти объекты не поддерживаются широко в программах для просмотра или редактирования файлов RTF, они также ограничивают совместимость RTF. [40] [41] [42] [43] [44] Если программное обеспечение, которое понимает определенный объект OLE, недоступно, объект отображается с использованием изображения объекта, которое встроено вместе с ним. [45] [46]
RTF поддерживает включение JPEG, PNG, Enhanced Metafile (EMF), Windows Metafile (WMF), Apple PICT, Windows device-dependent bitmap, Windows device-independent bitmap и OS/2 Metafile типов изображений в шестнадцатеричном (по умолчанию) или двоичном формате в файл RTF. Однако не все эти типы изображений поддерживаются всеми считывателями RTF. Если документ RTF открывается в программном обеспечении, которое не поддерживает тип изображения вставленного изображения, изображение не отображается. Записывающие устройства RTF обычно либо преобразуют вставленное изображение неподдерживаемого типа в изображение поддерживаемого типа, либо вообще не включают изображение.
Для лучшей совместимости с продуктами Microsoft некоторые авторы RTF включают одно и то же изображение в двух разных типах изображений в один файл RTF: один поддерживаемый тип изображения для отображения и одну несжатую копию WMF исходного изображения для улучшения совместимости с некоторыми приложениями Microsoft, такими как Wordpad. [47]
Этот метод значительно увеличивает размер файла RTF. Спецификация RTF не требует этого метода, и несколько реализаций не включают копию WMF (например, Abiword или Ted).
Для Microsoft Word также можно задать определенное значение реестра («ExportPictureWithMetafile=0»), чтобы запретить Word сохранять копию WMF. [47]
RTF поддерживает встраивание шрифтов, используемых в документе, но эта функция не получила широкой поддержки в программных реализациях. [48] [49] [50]
RTF также поддерживает общие названия семейств шрифтов, используемые для замены шрифтов : римские ( serif ), швейцарские ( sans-serif ), современные ( monospace ), рукописные , декоративные и технические . [19] Эта функция также не получила широкой поддержки.
Начиная с RTF 1.0, спецификация RTF поддерживает аннотации/комментарии документов. [19] Спецификация RTF 1.7 определила некоторые новые функции для аннотаций, включая отметку даты (ранее была только «отметка времени») и родителей аннотаций. [27] Когда документ RTF с аннотациями открывается в приложении, которое не поддерживает аннотации RTF, аннотации не отображаются. Аналогично, когда документ с аннотациями сохраняется как RTF в приложении, которое не поддерживает аннотации RTF, аннотации не сохраняются в файле RTF. Некоторые реализации, такие как Abiword (начиная с версии 2.8) и IBM Lotus Symphony (до версии 1.3), могут скрывать аннотации по умолчанию или требовать некоторых действий пользователя для их отображения.
Спецификация RTF также поддерживает сноски, которые широко поддерживаются в реализациях RTF (например, в OpenOffice.org, Abiword, KWord, Ted, но не в Wordpad). Концевые сноски реализованы как вариация сносок, поэтому приложения, поддерживающие сноски, но не концевые сноски, будут отображать концевую сноску как сноску.
Продукты Microsoft не поддерживают комментарии в нижних колонтитулах, сносках или заголовках. Аналогично, продукты Microsoft не поддерживают сноски в верхних колонтитулах, сносках или комментариях. Вставка комментария или сноски в один из этих неразрешенных контекстов может привести к повреждению документа. [29]
Спецификация RTF 1.2 определила использование объектов рисования, известных как фигуры, такие как прямоугольники, эллипсы, линии, стрелки и многоугольники. Спецификация RTF 1.5 ввела много новых управляющих слов для объектов рисования. [25]
Однако многие реализации RTF, такие как Apache OpenOffice , не поддерживают объекты рисования [51] (хотя они поддерживаются в LibreOffice 4.0 на [52] ) или Abiword. [53] Приложения, которые не поддерживают объекты рисования RTF, не отображают и не сохраняют фигуры. Некоторые реализации также не отображают текст внутри объектов рисования. [54] [55]
В отличие от формата DOC Microsoft Word, а также более новых форматов Office Open XML и OpenDocument , RTF не поддерживает макросы . По этой причине RTF часто рекомендовался вместо этих форматов, когда распространение компьютерных вирусов через макросы вызывало беспокойство. Однако наличие расширения .RTF не гарантирует безопасность файла, поскольку Microsoft Word будет открывать стандартные файлы DOC, переименованные с расширением RTF, и запускать любые содержащиеся макросы как обычно. Требуется ручная проверка файла в текстовом редакторе, таком как Notepad , или использование команды file
в UNIX - подобных системах, чтобы определить, является ли подозрительный файл действительно RTF. [9] [56] Включение опции Word «Подтверждать преобразование формата файла при открытии» также может помочь, предупреждая, что открываемый документ имеет формат, не соответствующий формату, подразумеваемому расширением файла, и предоставляя возможность прервать открытие этого файла. Один эксплойт, атакующий уязвимость, был исправлен в Microsoft Word в апреле 2015 года. [57]
С 2014 года появились вредоносные файлы RTF, в которые встроены эксплойты OpenXML . [58]
Каждая реализация RTF обычно реализует только некоторые версии или подмножества спецификации RTF. [7] Многие из доступных конвертеров RTF не могут понять все новые функции в последних спецификациях RTF. [37] [59]
Редактор WordPad в Microsoft Windows по умолчанию создает файлы RTF. Когда-то он по умолчанию использовал формат файла Microsoft Word 6.0, но поддержка записи для документов Word (.doc) была прекращена в обновлении безопасности. Поддержка чтения также была прекращена в Windows 7. WordPad не поддерживает некоторые функции RTF, такие как верхние и нижние колонтитулы. [60] Однако WordPad может читать и сохранять многие функции RTF, которые он не может создать, включая таблицы, зачеркивание, надстрочный индекс, подстрочный индекс, «дополнительные» цвета, цвета фона текста, нумерованные списки, правый или левый отступ, квазигипертекст и URL-ссылки, а также различные межстрочные интервалы. RTF также является форматом данных для «элементов управления форматированным текстом» в API MS Windows. [33]
Текстовый редактор по умолчанию для macOS , TextEdit , также может просматривать, редактировать и сохранять файлы RTF, а также файлы RTFD , и использует этот формат по умолчанию. По состоянию на июль 2009 года TextEdit имел ограниченные возможности редактирования полей документа RTF. Более старые программы обработки текста для Mac, такие как MacWrite и WriteNow, имели те же возможности RTF, что и TextEdit.
Следующие бесплатные текстовые процессоры с открытым исходным кодом пытаются работать с форматом файлов RTF от Microsoft, см. параграф с критикой ниже. AbiWord , Apache OpenOffice , Bean , Calligra , Collabora Online и LibreOffice .
Scrivener использует отдельные RTF-файлы для всех текстовых файлов, составляющих данный «проект».
Бесплатное приложение SIL International для разработки и публикации словарей использует RTF как наиболее распространенную форму вывода документов. Файлы RTF, созданные Toolbox, предназначены для использования в Microsoft Word , но могут также использоваться другими текстовыми процессорами, поддерживающими RTF.
Формат RTF можно использовать на некоторых устройствах для чтения электронных книг из-за его функциональной совместимости, [61] простоты и низких требований к процессорной мощности.
Скрипт с открытым исходным кодом rtf2xml может частично преобразовывать RTF в XML. [62] [63]
GNU UnRTF — это программа с открытым исходным кодом для преобразования RTF в HTML, LaTeX, макросы troff и другие форматы. pyth — это библиотека Python для создания и преобразования документов в форматах RTF, XHTML и PDF. Ruby RTF — это проект по созданию содержимого Rich Text с помощью Ruby . RaTFink — это библиотека подпрограмм Tcl, бесплатное программное обеспечение для генерации выходных данных RTF и скрипт Cost для преобразования SGML в RTF. RTF::Writer — это модуль Perl для генерации документов RTF. PHPRtfLite — это API, позволяющий разработчикам создавать документы RTF с помощью PHP . Pandoc — это конвертер документов с открытым исходным кодом с несколькими выходными форматами, включая RTF. RTFGen — это проект по созданию документов RTF с помощью чистого PHP . rtf.js — это библиотека на основе JavaScript для отображения документов RTF в HTML.
Инструмент командной строки macOS textutil может конвертировать файлы между форматами rtf, rtfd, text, doc, docx, wordml, odt и webarchive. [64] Редактор Ted также может конвертировать файлы RTF в форматы HTML и PS.
Rich Text Format был стандартным форматом файлов для текстовых документов в приложениях, разработанных для Microsoft Windows. Изначально Microsoft не делала спецификацию RTF общедоступной, что затрудняло конкурентам разработку функций преобразования документов в своих приложениях. Поскольку разработчики Microsoft имели доступ к спецификации, приложения Microsoft имели лучшую совместимость с форматом. Кроме того, каждый раз, когда Microsoft меняла спецификацию RTF, собственные приложения Microsoft имели преимущество по времени выхода на рынок, поскольку конкурентам приходилось перерабатывать свои приложения после изучения новой версии формата.
В своей антимонопольной жалобе 2004 года против Microsoft компания Novell утверждала, что действия Microsoft являются антиконкурентными. [65] [66]
Как и ".doc", RTF является запатентованным форматом файла, но он был разработан для более широкой совместимости и передачи.
Существует много различных версий фирменного формата Rich Text Format компании Microsoft, и переносимость файлов будет зависеть от используемой версии RTF.
Существует много различных версий фирменного формата Rich Text Format компании Microsoft, и переносимость файлов будет зависеть от используемой версии RTF.