Что такое формат RTF и чем отличается он от DOC? Что означает формат файла RTF, чем его открыть

Многие начинающие пользователи компьютера, столкнувшись с файлами неизвестного формата, в том числе и RTF, не знают, чем открыть их.


Что представляет собой файл RTF? Rich Text Format, в переводе с английского «богатый текстовый формат» от корпорации Microsoft, поддерживаемый многими версиями операционных систем и текстовыми редакторами. Это текстовые документы, для создания, а также для открытия, редактирования, изменения используются популярные компьютерные приложения по обработке текстов. С помощью этого формата осуществляют набор текста, его сохранение и копирование для других операционных систем. Для его характерно содержание только текстовых данных. При этом они могут набираться в любом другом формате, но окончательное сохранение выполняется в расширении RTF. Перенесение его текстового материала из одной программы в другую (Microsoft Office) совершенно несложное. Это же касается и версий операционной системы.

Зачем нужны файлы формата RTF

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

Открываем RTF-файл с помощью программ и сервисов



Данный формат обладает универсальностью, что является его неоспоримым преимуществом. Открыть программу для RTF-файлов можно с помощью приложения Word, входящего в пакет MS Office. Это наиболее успешный продукт, предложенный данной корпорацией, использующийся как стандарт в области обработки текстовых документов. Его отличает привлекательный интерфейс с представленными функциями. В состав комплекта Microsoft Office вошли Project, Visio, InfoPath, Designer, PowerPoint, SharePoint, Excel, Access, Outlook. Стоит отметить, что Word считается лучшим среди текстовых редакторов.
Чтобы открыть книги в файле RTF, можно воспользоваться приложением Kingsoft Writer, входящее в офисный пакет Kingsoft Office. Это текстовый редактор бесплатного пользования. Ему характерны те же функции, что и у вышеописанной программы Word. Приложение можно установить, как совместно со всем пакетом, но и как самостоятельный документ. У него классический интерфейс, похожий на другие текстовые редакторы. Оно применяется для создания и форматирования текстового материала с введением формул, диаграмм, графиков, изображений, объемных символов. Как и Word, Kingsoft Writer обеспечен отдельным окном для вставки ряда символов, отсутствующих на клавиатуре. Он позволяет осуществить мгновенную конвертацию материалов в файл PDF, не прибегая к использованию добавочных средств. Интерфейс в виде вкладки делает возможным запуск нескольких файлов в одном окне.
Для открытия формата RTF пользуются программой OpenOffice.org - многофункциональным пакетом приложений для офисных работ с многоязыковой поддержкой. Им управляют все главные операционные системы. Программа позволяет выполнить хранение всех данных с помощью собственного открытого формата ODF. Он получил одобрение международной организации стандартизации ISO. Одной из лучших функций считается экспорт текста в PDF файл за счет одного клика мыши. Здесь поддерживается технология Flash. Интерфейс программы достаточно понятен и удобен.
Обратите внимание. Для установки OpenOffice.org лицензия не требуется, что в свою очередь позволяет каждому желающему пользователю установить себе на ПК.
Приложение Notepad2 также поддерживает работу с RTF форматом. Это небольшой, но достаточно быстрый редактор текстов с применением подсветки синтаксиса. Его интерфейс прост и привлекателен. Программа не требует установки.
Решить поставленную задачу можно с помощью AbiWord - инструмента, обрабатывающего текстовые документы. Для него возможна печать, редактирование, создание различных материалов, а также обработка писем и сообщений.

Как открыть RTF на компьютере

Открыть файл на компьютере поможет штатное приложение WordPad, расположенное в меню «Пуск». Запустив его, нужно активировать мышкой кнопку главного меню и выбрать пункт «Открыть» и указать путь к документу, который нужно открыть. Приложение отображает весь каталог поддерживаемых форматов, не исключение RTF.
Также контекстное меню позволяет открыть требуемый файл, кликая правой кнопкой мышки по значку документа. Открывшееся меню отобразит все программы для его просмотра.

Как открыть RTF на Андроиде

Программа Smart Office, скачанная на планшет или другое мобильное устройство, поможет открыть RTF на андроид.
Достаточно хорошо поддерживает этот формат в данной операционной системе программа Cool Reader. Хорошее отображение оглавления, заголовков, изображений, чего нельзя сказать о таблицах.

Как открыть RTF в режиме онлайн

Чтобы открыть RTF онлайн, также осуществлять их изменения, можно воспользоваться практически всеми текстовыми редакторами популярных операционных систем (Mac OS, Windows) и многими бесплатными офисными программами. Поэтому, отправив по электронной почте документы в данном формате, можно не сомневаться в том, что получателю несложно будет открыть и изучить их в онлайн режиме, даже в том случае, если у него на ПК не установлен Офис.
Открыть файл онлайн несложно в Гугл документах. Перейдя по их адресу, нужно нажать вкладку «Открыть». В области правого нижнего угла активируют окошко «Создать документ». В открывшемся меню выбрать «Открыть». Во вкладке «Загрузка» мышкой активируют «Открыть» и выбирают файл данного расширения на ПК.

Как создать RTF-файл самому



Чтобы создать RTF файл самому, не потребуется какого-либо особого умения, просто нужно скачать и установить бесплатную программу Microsoft Office Excel Viewer для Windows. Ее интерфейс достаточно простой. Для операционной системы Mac подойдет Apple TextEdit. Эта программа считается основной для данной ОС. Создав текстовый документ, при сохранении выбирают нужный формат.

Конвертер для RTF-файлов

Преобразование документов одного формата в другой возможно с конвертером для файлов RTF. Многие сервисы предлагают свои услуги в этом направлении. Некоторые даже не требуют специальной установки на компьютер. Пользователю необходимо загрузить файл с диска или другого интернет ресурса в специальную область для конвертации. Далее подтвердить свои действия. На выходе он получит документ высокого качества требуемого формата.

Как сохранить документ в формате RTF: видео

Многие ответы на вопрос, как сохранить документ RTF, подскажет видео:

Ежедневно пользователям персональных компьютеров приходится сталкиваться с технической документацией, книгами, логами и другими текстовыми данными, содержащимися в файлах форматов txt и rtf. Поэтому, умение открыть их для просмотра или редактирования является одним из самых необходимых в компьютерной грамоте. Конечно, наряду с txt и rtf могут использоваться и иные расширения, но они не столь универсальны.

Преимущества использования форматов TXT и RTF

RTF — универсальный текстовый формат файлов с поддержкой форматирования

Опустив техническую сторону вопроса, можно говорить, что текстовые форматы различаются по универсальности использования. Здесь подразумевается возможность открыть документ на большем количестве операционных систем и желательно без использования специфического ПО. И txt и rtf могут редактироваться и просматриваться при помощи почти любого графического процессора. К слову, открывает файл doc лишь и некоторые ее аналоги на других системах (OpenOffice, LibreOffice и т.д.).

Чем отличаются TXT и RTF друг от друга

TXT состоит напрямую из обычных символов (буквы, цифры, пробелы и другие), составленных в определенной последовательности и часто организованных в строки. Такие файлы могут быть прочитаны и отредактированы в любой операционной системе практически любой , например, блокнотом.

Недостатком расширения txt является невозможность его форматирования. Тексту в нем не удастся присваивать разные цвета и стили, как не будет доступно и . А вот формат RTF обладает возможностью форматирования, незначительно теряя при этом в универсальности.

Это реализовано благодаря использованию специального набора управляющих слов и символов. То есть, помимо самого текста, файл содержит и данные по его форматированию, такие как поля, нумерация страниц, ссылки и многое другое. Этот формат открывает не каждая программа для работы с текстом, но и тех, что есть, вполне достаточно.

Какими программами можно открыть TXT

Для работы с этим типом отлично подходят такие офисные продукты, как MS Word, WordPad и LibreOffice Writer. В Microsoft Windows, большинство пользователей чаще открывает и редактирует файлы формата txt блокнотом – это самый простой, который не требователен к ресурсам компьютера и к знаниям, необходимым для работы в более сложных программах.

Если вам необходимо открыть txt файл в операционных системах, построенных на ядре Linux — обратите внимание на утилиту Gedit, которая пользуется у поклонников данной ОС заслуженной популярностью. В случае с Mac OS основным редактором текстовых файлов считается программа TextEdit.

Программы для открытия и работы с RTF

Более сложная структура rtf не может быть открыта простым блокнотом и его аналогами в других операционных системах. Здесь подойдут:

  • MS Word, WordPad - для Windows;
  • LibreOffice Writer - для Linux;
  • TextEdit - для Mac OS.

Формат Rich Text (RTF)

Данный формат был определен фирмой Microsoft как стандартный формат для обмена текстовыми документами. Следовательно, по назначению этот формат подобен SYLK-формату для электронных таблиц. RTF поддерживается многими продуктами фирмы Microsoft. Так, например, начиная с версии 2.0, он введен в Windows в качестве Clipboard-формата, благодаря чему возможен обмен данными между различными прикладными программами Windows. Кроме того, RT-формат поддерживается программами WORD для Macintosh, начиная с версии 3.X, и WORD для PC, начиная с версии 4. X.
В RTF для обмена документами используются только представимые символами коды из ASCII-, MAC- и PC-символьного набора. Кроме текста, файл в RT-формате в читаемой форме содержит команды управления.
Документ состоит преимущественно из команд управления настройки программы чтения файлов в RTF-формате. Эти команды можно разделить на управляющие слова (control words) и управляющие символы (control symbols).
Управляющее слово представляет собой последовательность символов с разделителем (delimiter) в конце:
\lettersequence
Перед управляющим словом вводится обратная косая черта "\" (backslash). В качестве разделяющих могут использоваться следующие символы:
Ш Пробел (space), причем этот символ относится к управляющему слову;
Цифра или знак "-". После этих символов должен следовать параметр с разделителем. В качестве разделителя может быть использован пробел или другие символы, кроме цифр и букв;
Все символы, отличные от цифр и букв. Эти символы не относятся к управляющему слову.
В RT-формате для задания управляющей последовательности используются буквы от "А" до "Z" и от "а" до "z", а также цифры от "0" до "9". Национальные символы к управляющей информации не относятся.
В качестве, управляющих символов используются отдельные буквы. Перед каждым управляющим символом вводится обратная косая черта "\":
\control symbol
В настоящее время определены только некоторые из этих символов. Поэтому при чтении неизвестные символы могут быть пропущены.
В RT-формате существует возможность объединять отдельные последовательности в группы при помощи скобок:
{ начало группы
} конец группы
Такие группы создаются, например, при описании сносок, колонтитулов и т.п. Если необходимо разместить символы "\", "{" или "}" внутри обычного текста, то перед ними надлежит поставить обратную косую черту:
\\
\{
\}.
Это позволяет программе, читающей RTF-последовательность, распознать, что символ не следует интерпретировать как управляющий.
В RT-формате используются также некоторые символьные коды для управления печатью
Код Значение
09Н Табулятор
0АН Символ CR
0СН Символ LF
Символы CR и LF, расположенные внутри текста, будут пропущены. Microsoft использует эти символы для большей наглядности при представлении RTF-файла. Внутри управляющих слов символы CR и LF могут иметь особое значение, подробнее об этом будет сказано при описании команд.

Специальные управляющие слова (special control words)
В RTF имеются управляющие слова специального назначения. Ниже приведены эти слова и их назначение.

\chpgn
Управляющее слово change page number выводит текущий номер страницы.
\chftn
Управляющее слово change footnote активизирует автоматическую нумерацию сносок.
\chdate
С помощью change date можно вывести текущую дату.
\chtime
С помощью change time можно вывести текущее время.
\chatn
Ссылка на примечание (текст следует в группе).
\chftnsep
Свидетельствует об изменении линии, отделяющей сноски от текста.
\/
С помощью данной последовательности вводится текст формулы.
\:
Обозначает подпункт индекса.
\*
Текст может быть пропущен при чтении RTF-формата.
\~
Задает жесткий (неразрываемый) пробел между двумя словами, т.е. в этой позиции предложение не может быть разделено при переносе на следующую строку.
\-
Символ обозначает мягкий перенос (nonrequired hyphen).
\_
Символ обозначает неразрываемый перенос (nonbreaking hyphen), на месте которого слово не может быть разделено.
\"hh
Последовательность позволяет прямой ввод в тексте шестнадцатеричных чисел. Они задаются вместо символов hh.
\page
Данная последовательность задает переход на новую страницу.
\line
Эта последовательность вызывает переход на новую строку в тексте.
\раr
С помощью данной последовательности в тексте отмечается конец абзаца. Последовательность \раr может заменяться последовательностью \10 или \13. При этом \10 соответствует ASCII-символу с кодом 10 (carriage return). Непосредственно ввести ASCII-код 10 (CR) нельзя, т.к. он игнорируется программой чтения.
\sect
Эта последовательность обозначает конец текстового фрагмента или текстового абзаца.
\tab
Данная последовательность заменяет табулятор. Можно также непосредственно задавать ASCII-код 09Н.
\сеll
Конец таблицы (столбец).
\row
Конец таблицы (строка).

Операторы настройки (destination control words)
С помощью описанных ниже управляющих слов можно произвести основную настройку программы чтения RTF. Они могут встречаться только в начале документа или в начале группы. Все операторы вместе с параметрами должны быть заключены в скобки, например:
{\rtf0\pc.......}
Ниже описан формат некоторых операторов.

\rtf <параметр>
Задает метку начала файла. В качестве параметра программа, при помощи которой создается файл, может указывать номер версии. Например:
{\rtf0.......}
Метка должна стоять в начале файла. После этого оператора могут следовать другие операторы или закрывающая скобка.
Установка вида кодировки для сохраняемого текста осуществляется с помощью следующих операторов:
\ansi: текст хранится в стандартном ASCII-формате. Этот формат используется, например, в Windows.
\mac:. текст хранится в кодировке Macintosh
\рс: для вывода текста используется кодировка символов IBM-PC.
\рса: IBM-PC Code Page 850 (модель PS\2).
Для передачи текстов между различными системами должна использоваться кодировка \ansi.

\colortbl
Windows и другие программы пользуются палитрами для определения используемых цветов. Чаще всего палитра состоит из 16 различных цветов, получаемых путем комбинации основных цветов - красного, зеленого и синего. Команда \colortbl позволяет изменить отдельные определения в палитре. Для каждого цвета в таблице указывается величина красной, зеленой и синей составляющей. Каждый цвет описывается тремя параметрами:
\red000
\green000
\blue000
Вместо 000 указывается величина доли цвета в диапазоне от 0 до 255. Пример: в таблице, состоящей из 16 цветов, должны быть заново определены цвета 0-й и 2-й. Для переопределения цветов может быть задана следующая последовательность:
{ \colortbl \redl28\green64\bluel28\;;\red0\green64\bluel2 8; }
Определение цвета завершается точкой с запятой. Поскольку 1-й цвет остается без изменений, в последовательности два символа ";" следуют один за другим. Последовательность завершается закрывающей скобкой.
Оператор \cfn определяет цвет фона (при стандартной настройке n=0), а оператор \cbn - цвет символа (при стандартной настройке n=0).
\fonttbl
Данный оператор используется для построения таблицы шрифтов и соотносит имя шрифта (группы шрифтов) с номером шрифта. При определении шрифта можно использовать следующие операторы:
\fnil: имя группы шрифтов неизвестно. При выводе должен использоваться стандартный шрифт.
\froman: должны использоваться шрифты группы Roman (например, Times Roman)
\fswiss: этот оператор предписывает использование шрифтов из группы Swiss (Helvetica, Swiss и т.д.)
\fmodern: могут использоваться шрифты Pica, Elite и Courier.
\fscript: используются курсивные шрифты группы Script.
\fdecor: при указании этого оператора шрифты должны выбираться из группы Decor (Old English и т.д.).
\ftech: выбор группы шрифтов с техническими и математическими символами (SYMBOL и т.д.).
Команда для создания группы шрифтов может состоять из таких операторов:
{\fonttbl\f0\fnil default;}
{\fl\froman roman h;}
{\f2\fswiss helvetica;}
После ключевого слова \fonttbl следует первый номер шрифта \f0. Далее идет определение группы шрифтов. Здесь после номера 0 указано \fnil, т.е. имя группы неизвестно. Следующий параметр обозначает имя выбираемого шрифта (например, roman h). Указание default говорит считывающей программе о том, что следует использовать стандартный шрифт. После имени шрифта стоит точка с запятой. В приведенном примере определены только шрифты с номерами 1 и 2. Вся последовательность может быть объединена фигурными скобками в группу.
Таблица шрифтов должна быть заполнена значениями до того, как встретится оператор \stylesheet или текст. Стандартный шрифт вводится оператором \deffn.

\stylesheet
Этот оператор определяет шрифт абзаца, т.е. размер, начертание и имя гарнитуры, а также способ выравнивания текста абзаца. При этом используются два ключевых параметра:
\sbasedon000: вместо символов 000 указывается номер вида шрифта, который используется в качестве текущего.
\snext000: назначает номер следующего вида шрифта (style), который - станет текущим.
Оператор может иметь, например, следующий вид:
{\stylesheet\s0\f3\fs20\qj Normal;}
{\sl\f3\fs30\b\qc Heading Level 3;}
Шрифты нумеруются числами от 0 до n (\s0...). В первой строке стилю абзаца 0 (\s0) предписывается имя Normal. Вывод текста выполняется шрифтом 3 (\f3), размером 10 пунктов (\fs20). Параметр \qj говорит о том, что надпись должна выравниваться по формату. Вторая строка определяет стиль шрифта 1, который получает имя Heading Level 3. Шрифт имеет размер 15 пунктов, жирное начертание (\Ь = bold) и при выводе надпись центрируется (\qc).

\pict
Этот оператор используется при описании рисунка в формате битовой карты (bitmap). Следующие параметры содержат описание рисунка в виде шестнадцатеричных значений. Параметры могут быть выборочно использованы для определения геометрии рисунка или его формата:
\pich000: оператор указывает высоту рисунка в пикселях. Вместо трех нулей подставляется числовое значение. Если оператор отсутствует, высота рисунка определяется из текущих графических данных. С помощью параметра можно задать для рисунка определенную высоту.
\piw000: оператор задает ширину рисунка в пикселях. Справедливо все, сказанное о предыдущем операторе.
\picscaled: с помощью этого оператора рисунок масштабируется таким образом, чтобы он точно заполнял отведенную для него область.
\ wmetafilen: параметр указывает, что данные хранятся в формате Windows-метафайла. Параметр n определяет тип метафайла (1 = ММ-текст).
\macpict: параметр указывает, что данные хранятся в Macintosh-формате Quick-Draw.
\bin000:. параметр определяет количество байтов. Вместо трех нулей записывается шестнадцатеричное число.
\wbitmapn: параметр определяет формат bitmap-рисунка. Параметр n задает тип (0 соответствует логической битовой карте).
\brdrs: определяет простую рамку для рисунка
\brdrdb: определяет двойную рамку для рисунка.
\brdrth: определяет жирную линию для рамки рисунка.
\brdrsh: определяет затененную рамку для рисунка
\brdrdot: определяет для рисунка пунктирную линию.
\brdrhair: определяет тонкую линию для рамки рисунка.
\picwGoaln: задает желаемую ширину рисунка в twips
\pichGoaln: задает желаемую высоту рисунка в twips.
\picscalexn: задает горизонтальное масштабирование (n может принимать значения от 1 до 100, по умолчанию -10).
\picscaleyn: задает вертикальное масштабирование (n может принимать значения от 1 до 100, по умолчанию - 10).
\piccroptn: описывает верхнее поле рисунка в twips. При положительных значениях параметра n верхняя часть рисунка обрезается. Отрицательные значения n дают возможность построить вокруг рисунка рамку. Стандартное значение n равно 0.
\рiccrорbп: описывает нижнее поле рисунка в twips. При положительных значениях параметра n нижняя часть рисунка обрезается. Отрицательные значения n дают возможность построить вокруг рисунка рамку. Стандартное значение n равно 0.
\рiссrорrn: описывает правое поле рисунка в twips. При положительных значениях параметра n рисунок обрезается справа. Отрицательные значения n дают возможность построить вокруг рисунка рамку. Стандартное значение n равно 0.
\piccropln: описывает левое поле рисунка в twips. При положительных значениях параметра п рисунок обрезается слева. Отрицательные значения п дают возможность построить вокруг рисунка рамку. Стандартное значение п равно 0.
\wbmbitspixeln: определяет количество битов, приходящихся на пиксел, для bitmap-рисунка (стандартное значение равно 1).
\ wbmplanesn: определяет количество битовых плоскостей (стандартное значение равно 1).
\wbmwidtbbytesn: определяет длину битовой карты в байтах.

\footnote
Оператор должен следовать непосредственно после отметки сноски и относиться к тексту.

\header
Оператор определяет верхний колонтитул текущего фрагмента текста и поэтому должен указываться в начале текста.

\headerl
Оператор определяет верхний колонтитул четной страницы (left hand header), на которой колонтитул выводится с выравниванием влево.

\headerr
Оператор устанавливает верхний колонтитул нечетной страницы, на которой колонтитул выводится с выравниванием вправо (right hand header).

\headerf
Оператор устанавливает верхний колонтитул первой страницы (first page header).

\footer
Оператор устанавливает нижний колонтитул текущего фрагмента и должен указываться перед началом текста.

\footerl
Оператор устанавливает нижний колонтитул четной страницы (left hand footer), на которой колонтитул выводится с выравниванием влево.

\footerr
Оператор устанавливает нижний колонтитул нечетной страницы, на которой он выводится с левосторонним выравниванием (right hand footer).

\footerf
Оператор устанавливает нижний колонтитул первой страницы (first page footer).

\ftnsep
Оператор определяет символ-разделитель для сносок.

\ftnsepc
Оператор определяет разделитель для сноски, которая продолжается на следующей странице (continued footnote).

\ftncn
Этот оператор применяется для обозначения продолжения текста сноски.

\info
С помощью данного ключевого слова в начале документа открывается информационный блок. Он может содержать информацию о заголовке документа, дате его составления и т.д. Внутри информационного блока, который начинается оператором \info, могут встречаться следующие операторы:
\title
\subject
\operator
\author
\keywords
\doccomm
\version
\nextfile
Перечисленные команды позволяют передавать вспомогательную информацию о документе, например, имя автора, версию текста, заголовок и т.д. Программа чтения RTF-данных не обязана обрабатывать команды информационного блока.

\vern000
Вместо 000 в операторе записывается номер версии программы, в которой составлен документ.

\creatim
С помощью данного ключевого слова определяется дата и время создания документа. Эти данные кодируются с помощью таких операторов:
\уr000: год создания документа
\то000: месяц создания документа
\dy000: день создания документа
\hr000: время создания документа в часах
\min000: время создания документа в минутах
\sec000: время создания документа в секундах

\revtim
Определяет время и дату последней корректировки документа. Оба параметра задаются так, как указано в описании оператора \creatim.

\printtim
Определяет время и дату последней распечатки документа. Оба параметра задаются так, как указано в описании оператора \creatim.

\buptim
Определяет время и дату последнего сохранения документа (backup). Оба параметра задаются так, как указано в описании оператора \creatim.

\edmins000
Хранит длительность (в минутах) последнего сеанса редактирования.

\nofpages000
\nofwords000
\nofchars000
\id000
Вышеуказанные операторы содержат уточняющую информацию о документе (количество страниц, количество слов и количество символов), а также внутренний идентификационный номер.

\comment
В заголовке может встретиться текст, помеченный ключевым словом \comment. В этом случае речь идет о комментарии в тексте, который пропускается программой чтения данных в RTF-формате.

\field
Имеется группа операторов, при помощи которых описываются поля, вставляемые в WORD. Группа начинается ключевым словом \field, за которым могут следовать такие операторы:
\flddirty: поле было изменено во время последней актуализации
\fldedit: текст был отредактирован во время последней актуализации
\fldlock: поле закрыто для доступа и не может быть актуализировано
\fldpriv: результат не сообщается (например, рисунок)

\xe
Эта группа операторов начинается последовательностью символов \xe и может содержать следующие ключевые слова:
\bхе: для номеров страниц задается жирное начертание (bold).
\ixe: для номеров страниц задается курсивное начертание (italic).
\txe text: вместо номера страницы используется текст.
\rхе bookmark: генерация номеров страниц для области, содержащей закладку (bookmark).

\tc
Группа содержит элементы данных для таблиц и может состоять из следующих ключевых слов:
\tcfn: передается тип таблицы (n может иметь значения от А до Z, значение по умолчанию - С).
\tcln: номер уровня (стандартное значение n = 1).

В группу операторов, определяющих закладки, входят только два оператора:
\*\bkmkstart: начало области
\*\bkmkend: конец области

Операторы форматирования (document formatting)
В следующую группу входят команды для форматирования текста. Эти команды могут быть разделены на подгруппы:
· команды, действие которых распространяется на весь текст,
· команды, изменяющие формат только текущего абзаца,
· команды, которые относятся к текущему выводу текста.
В этом разделе описываются операторы форматирования всего документа.

\paperw000
Команда задает ширину листа в twips (1 twip равен 1/20 пункта или 1/1440 дюйма). Значение ширины указывается вместо 000. Если команда отсутствует, то ширина листа устанавливается равной 12240 twips.

\рареrh000
Команда задает высоту листа в twips. Значение высоты указывается вместо 000. Если команда отсутствует, то высота листа устанавливается разной 15840 twips.

\margl000
С помощью этой команды можно установить ширину левого поля при печати в twips. Стандартная ширина поля равна 1800 twips.

\margr000
С помощью этой команды можно установить ширину правого поля при печати в twips. Стандартная ширина поля равна 1800 twips.

\margt000
С помощью этой команды можно установить ширину верхнего поля (margin top) при печати в twips. Стандартная ширина поля равна 1440 twips.

\margb000
С помощью этой команды можно установить ширину нижнего поля (margin bottom) при печати в twips. Стандартная ширина поля равна 1440 twips.

\facingp
Оператор facing page определяет внешний вид страницы. Он устанавливает например, печатается колонтитул на четных или на нечетных страницах. Если з; оператором следует параметр 0, то вывод подавляется.

\gutter000
С помощью этого оператора можно установить ширину поля подшивки (gutter внутри facing page.

\deftab000
Команда определяет величину табулятора. Стандартное значение составляет 72 twips.

\widowctrl
Оператор включает wido-контроль. Если за оператором следует параметр 0, то контроль снова отключается.

\endnotes
Если в документе указан этот параметр, то тексты сносок размещаются в конце фрагмента.

\ftobj
По умолчанию тексты сносок выводятся в конце страницы (footnotes bottom justified). Данный оператор позволяет переключиться с установки, заданной опер тором \endnotes, на стандартную установку.

\ftntj
Тексты сносок выводятся в тексте (footnotes top justified).

\ftnstart000
Вместо 000 команда содержит начальный номер первой сноски. Стандартное значение номера равно 1.

\ftnrestart
При указании этого оператора нумерация сносок на каждой странице начинается с 1. Параметр 0 отключает эту установку.

\pgnstart000
Вместо 000 команда содержит номер начальной страницы. Стандартное значение номера равно 1.

\linestart000
Значение, указанное вместо 000, задает номер начальной строки. Стандартное значение номера равно 1.

\landscape
Команда позволяет задать альбомную ориентацию (landscape). При указании параметра 0 восстанавливается книжная ориентация.

\byphhotz
Определяет область, которая обозначается как - Hyphenation hot zone.

\ftnsep
Определяет разделитель, который отделяет сноски от текста.

\ftnsepc
Определяет разделитель, который отделяет сноски, продолжающиеся на следующую страницу, от текста.

\ftncn
Отметка для следующей сноски.

\enddoc
Сноска в конце документа.

\*\nextfile
Передает (в скобках {}) имя файла вывода или индексного файла.

\*\template
После оператора в скобках {} указано имя файла шаблона (template), если оно отличается от принятого по умолчанию.

\makeback
Автоматическое создание Backup-файла, если документ защищен.

\defformat
Сообщает программе чтения RTF-данных о том, что документ должен быть защищен.

\revison
Включает отметку об изменениях.

\margmirror
Указывает на необходимость зеркально отобразить описания для левого и правого полей.

\rеvрrорn
Значение параметра n задает начертание и способ выделения символов при создании редакторских примечаний. Значение n, равное 0, соответствует нормальному начертанию, 1 - жирному, 2 - курсиву, 3 - подчеркиванию (стандартная настройка), 4 - двойному подчеркиванию.

\rеvbаrn
В зависимости от значения параметра n, задается способ выделения вертикальными линиями текста редакторских примечаний: 0 - не отмечается, 1 - отмечается левый край текста, 2 - отмечается правый край текста, 3 - отметка располагается за пределами текста (стандартная настройка) по краю страницы.

Форматирование секции (section formatting)
Вторая группа операторов управляет форматом секции (section) и состоит из следующих команд.

\sectd
Оператор устанавливает стандартную настройку параметров секции.

\sbknone
Оператор подавляет переход на новую страницу перед началом секции (section break continuous).

\sbkcol
При указании этой команды в начале секции осуществляется переход на новую колонку (section break new column).

\sbkpage
При указании этой команды (section break new page) в начале секции происходит переход к новой странице.

\sbkeven
При указании этой команды в начале секции выполняется переход к новой странице, если номер страницы четный (section break even).

\sbkodd
При указании этой команды в начале секции выполняется переход к новой странице, если номер страницы нечетный (section break odd).

\pgostartsn
Нумерация страниц начинается с номера n.

\pgnrestart
Команда устанавливает временную нумерацию страниц, начиная со значения 1. Параметр 0 восстанавливает прежний порядок нумерации.

\pgndec
Номера страниц выводятся в десятичном формате.

\pgnucrm
Номера страниц выводятся большими римскими цифрами (upper case roman).

\pgnlcrm
Номера страниц выводятся маленькими римскими цифрами (lower case roman).

\pgncont
Сквозная нумерация страниц (стандартная настройка).

\pgnucltr
Номера страниц выводятся прописными символами (upper case letter).

\pgnlcltr
Номера страниц выводятся строчными символами (lower case letter).

\pgnx000
С помощью этой команды задается X-координата номера страницы при автоматической нумерации. Значение указывается относительно верхнего левого угла страницы и по умолчанию устанавливается равным 720 twips.

\pgny000
С помощью этой команды задается Y-координата номера страницы при автоматической нумерации. Значение указывается относительно верхнего левого угла страницы и по умолчанию устанавливается равным 720 twips.

\linemod000
Оператор устанавливает величину интервала при нумерации строк.

\linex000
Оператор устанавливает расстояние между строками. По умолчанию оно равно 360 twips.

\linestartn
Нумерация строк начинается со значения n.

\linerestart
Возвращает номер строки к значению 1. Команда устанавливает, что нумерация строк начинается с 1.

\linepage
На каждой странице нумерация строк начинается со значения 1.

\linecont
Нумерация строк продолжается с предыдущей секции (предыдущей главы).

\headery000
Команда задает Y-координату верхнего колонтитула. Значение указывается относительно верхнего края страницы и по умолчанию принимается равным 720 twips.

\footery000
Команда задает Y-координату нижнего колонтитула. Значение указывается относительно нижнего края страницы и по умолчанию принимается равным 720 twips.

\vertalt
Текст по вертикали выравнивается к верхнему краю страницы. Текст располагается в верхней части страницы (vertically align at top of page).

\vertalc
Текст размещается посредине страницы. Вертикальное выравнивание текста выполняется по центру страницы (vertical align centered).

\vertalj
Текст по вертикали размещается так, чтобы заполнить всю страницу (vertical align justified).

\vertalb
Вертикальное выравнивание текста выполняется по нижнему краю страницы (vertical align bottom).

\cols000
С помощью этой команды можно задать количество столбцов в строке. Стандартное значение равно 1.

\colsx000
С помощью этой команды устанавливается расстояние между двумя столбцами в twips. Стандартное значение равно 720 twips.

\endnhere
При указании этого оператора послетекстовые сноски выводятся в конце секции. Такой вывод можно подавить путем задания параметра 0.

\titlepg
Оператор задает вывод титульной страницы. Параметр 0 подавляет вывод титульной страницы.

Форматирование абзаца (paragraph formatting)
Следующие команды управляют форматированием абзаца (paragraph).
\pard
Оператор устанавливает стандартную настройку для абзаца.

\s000
Команда определяет шрифт для данного абзаца. С помощью подставляемого вместо 000 значения осуществляется выбор в таблице шрифтов.

\ql
При задании команды quad left текст выравнивается по левому краю страницы.

\qr
При задании команды quad right текст выравнивается по правому краю страницы.

\qc
При задании команды quad centered текст размещается по центру страницы.

\qj
При задании команды quad justified текст выравнивается по формату страницы.

\fi000
Оператор определяет величину отступа первой строки абзаца (first line indent). Стандартное значение равно 0.

\li000
Оператор определяет величину втяжки абзаца слева (left indent). Стандартное значение равно 0.

\ri000
Оператор определяет величину втяжки абзаца справа (right indent). Стандартное значение равно 0.

\sb000
Оператор задает количество пустых строк, вставляемых перед абзацем (spaces before). Стандартное значение равно 0.

\sa000
Оператор задает количество пустых строк, вставляемых после абзаца (spaces after). Стандартное значение равно 0.

\sl000
Команда устанавливает расстояние между строками в пунктах. Стандартное значение равно одной строке (12 пунктам). Команда \sl000 включает auto line mode.

\intbl
Абзац является частью некоторой таблицы.

\keep
При указании этой команды фиксируется принадлежность текста к текущему абзацу. Команда отключается указанием параметра 0.

\kеерn
При указании этой команды текст ставится в соответствие следующему (next) абзацу. Команда отключается указанием параметра 0.

\sbys
Указанием этого оператора может быть включен режим side by side. При задании параметра 0 режим отключается.

\pagebb
Указанием этого оператора может быть включена команда page break before. При задании параметра 0 команда отключается.

\nоlinе
При задании этой команды отключается нумерация строк. Указание параметра 0 подавляет команду.

\brdrt
Задает линию над абзацем (boarder top).

\brdrb
Задает линию под абзацем (boarder bottom)..

\brdrl
Задает линию слева от абзаца (boarder left).

\brdrr
Задает линию справа от абзаца (boarder right).

\box
Задает рамку вокруг абзаца.

\brdrs
Задает нормальную линию (single thickness) для рамки.

\brdrtb
Задается толстую (thick) линию для рамки.

\brdsu
Задает оттененную рамку (boarder).

\brdrdb
Задается двойную рамку (boarder).

\brdrdot
Рамка обозначается пунктирной линией.

\brdrbair
Рамка обозначается тонкой линией.

\brspn
Расстояние в twips между рамкой и объектом.

\tqr
Обозначает табулятор, относительно которого текст выравнивается вправо (right flush tab).

\tgc
Обозначает табулятор, относительно которого текст выравнивается по центру (centered tab).

\tqdec
Обозначает десятичный табулятор (decimal aligned tab).

\tldot
Обозначает табулятор, для которого пустое пространство заполняется точками (tab leader dot).

\tibypben
Обозначает табулятор, для которого пустое пространство заполняется дефисами (tab leader hyphen).

\tlul
Обозначает табулятор, для которого пустое пространство заполняется символами подчеркивания (tab leader underline).

\tith
Обозначает табулятор, для которого пустое пространство заполняется жирной
чертой (tab leader thick line). \

\tx000
С помощью этой команды задается положение табулятора.

\tb000
С помощью команды задается положение вертикального табулятора. При этом по всей длине текущего абзаца проводится вертикальная линия.

Следующие команды позволяют разместить абзац в определенной позиции листа.
\posxn
Позиционирует абзац на расстоянии n twips от левого края.

\posxc
Абзац по горизонтали размещается по центру относительно указанного элемента (страницы, колонки).

\posxi
Абзац по горизонтали размещается внутри указанного элемента.

\posxl
Абзац по горизонтали размещается слева относительно указанного элемента.

\posxo
Абзац по горизонтали размещается вне указанного элемента.

\posxr
Абзац по горизонтали размещается справа относительно указанного элемента.

\posysi
Позиционирует абзац на расстоянии "n" twips от верхнего края.

\posyil
Позиционирует абзац в текущей позиции (inline).

\posyt
Абзац по вертикали размещается в верхней части указанного элемента (страницы, колонки).

\posyc
Абзац по вертикали размещается в центре указанного элемента.

\posyb
Абзац по вертикали размещается в нижней части указанного элемента.

\abswn
Абсолютная ширина текста абзаца в twips.

\dxfrtextn
Расстояние в twips по горизонтали между основным текстом и абсолютно позиционированным объектом (рамкой с текстом или рисунком).

\pvmrg
Позиция по вертикали относительно полей.

\pvpg
Позиция по вертикали относительно страницы.

\phmrg
Позиция по горизонтали относительно полей.

\рhpg
Позиция по горизонтали относительно страницы.

\рhсоl
Позиция по горизонтали относительно столбца.

Для форматирования таблиц определены следующие команды.
\clbrdrb
Нижний край таблицы.

\clbrdrt
Верхний край таблицы.

\clbrdrl
Левый край таблицы.

\clbrdrr
Правый край таблицы.

\trowd
Устанавливает стандартные значения строк таблицы.

\trql
Левостороннее выравнивание при размещении строк таблицы (с учетом столбцов).

\trqr
Правостороннее выравнивание при размещении строк таблицы (с учетом столбцов).

\trqc
Центрирование строк таблицы (с учетом столбцов).

\trgapho
Половина расстояния между ячейками таблицы (в twips).

\trrbn
Высота строки в twips.

\trleftm
Расположение левого угла таблицы.

\cellxn
Смещение правой границы таблицы.

\clmgf
Объединение (merge) первой ячейки с остальными ячейками таблицы.

\clmrg
Объединение ячейки с предыдущей ячейкой.

Форматирование символов (character formatting)
Данная группа операторов используется для форматирования символов (жирное начертание, подчеркивание и т.д.).

\plain
С помощью этой команды устанавливаются стандартные параметры форматирования.

\b
Установка жирного начертания (bold) для печатаемого текста. Для отмены необходимо указать параметр 0.

\i
Задание курсивного начертания (italic) для печатаемого текста. Установка отменяется указанием параметра 0.

\strike
Печатаемый текст будет зачеркнутым (strikethrough). Для отмены следует выбрать параметр 0.

\outl
Установка контурного шрифта (outline) для печатаемого текста. Для отмены надлежит выбрать параметр 0.

\shad
Печатаемый текст будет оттенен. Для отмены необходимо установить параметр 0.

\scaps
Установка печати текста строчными буквами (small caps). Для отмены нужно выбрать параметр 0.

\caps
Установка печати текста прописными и строчными буквами. Для отмены необходимо выбрать параметр 0.

\v
Печатаемый текст будет заменен пробелами (invisible). Для отмены следует установить параметр 0.

\f000
Установка настройки шрифта с указанием в качестве параметра номера фонта.

\fs000
Оператор в качестве параметра содержит высоту символов, заданную в единицах по 1/2 пункта. Стандартное значение высоты равно 24 единицам (12 пунктам).

\expnd000
Параметр позволяет изменить расстояние между символами путем указания количества интервалов величиной по 1/4 пункта каждый.

\ul
Установка режима подчеркивания текста. Для отмены необходимо выбрать параметр 0.

\ulw
Оператор позволяет задать подчеркивание только слов.

\uld
Задание пунктирного подчеркивания текста (dotted underline).

\uldb
Установка режима двойного подчеркивания текста (double underline).

\ulnone
Отмена подчеркивания текста.

\up000
Установка режима надстрочного написания символов (superscript). Размер задается в единицах 1/2 пункта.

\dn000
Установка режима подстрочного написания символов (subscript). Размер задается в единицах 1/2 пункта.

\cf000
Указание номера цвета в палитре.

\сb000
Задание цвета фона путем указания номера в палитре.

Последующие версии RT-формата могут быть дополнены новыми командами. Если программа не распознает команду, то она может быть пропущена. Конец каждой команды отмечается одним из описанных выше разделяющих символов (чаще всего -точкой с запятой).

Сегодня мы рассмотрим подробнее RTF (формат). Расшифровывается данная аббревиатура, как Rich Text Format. Речь идет о популярном формате текстового файла. Им поддерживаются широкие возможности для форматирования.

Файлы RTF: что за формат

Текст в данном формате можно выделять жирным, наклонным или подчеркнутым, кроме того, пользователь может выбирать цвет и шрифты для напечатанных символов. RTF (формат) позволяет устанавливать разную ширину междустрочного расстояния и выставлять отступ по краям листа. Данное решение невероятно популярно среди пользователей.

Решение от Microsoft

Прежде всего, RTF (формат) можно открыть благодаря приложению Word, которое входит в состав пакета MS Office. Речь идет об одном из наиболее успешных продуктов указанной корпорации, который в настоящее время является стандартом в сфере обработки офисных документов. Решение обладает привлекательным интерфейсом, представляющим все свои функции. В комплект Microsoft Office, кроме необходимого нам приложения Word, также входят следующие компоненты: Visio, Designer, SharePoint, Project, OneNote, InfoPath, Access, PowerPoint, Outlook, Excel. Необходимый нам компонент можно установить отдельно и в группе с другими. Отметим, что именно Word является лидирующим в мире текстовым редактором.

Kingsoft Writer

Если необходимо открыть книги в формате RTF, данное приложение вам поможет. Речь идет о бесплатном текстовом редакторе, который схож с вышеописанной программой Word. Инструмент входит в состав решения Kingsoft Office. Однако можно установить его и отдельно. Программа обладает классическим интерфейсом, свойственным для текстовых редакторов. Благодаря приложению можно создавать и форматировать текстовые документы, а также дополнять их формулами, графиками, диаграммами, объемными символами и изображениями. Есть и еще одна причина для аналогий с Word. Здесь реализовано отдельное окно, позволяющее вставить различные символы, которые отсутствуют на клавиатуре. Все материалы можно мгновенно конвертировать в формат PDF без дополнительных средств. Реализация вкладочного интерфейса позволяет запускать несколько файлов в едином окне.

Альтернативные решения

Есть и другие программы, посредством которых можно взаимодействовать с форматом RTF. К ним относится и OpenOffice.org. Речь идет о полнофункциональном пакете офисных приложений, в котором реализована многоязыковая поддержка. Данное решение работает под управлением всех основных операционных систем. OpenOffice.org дает возможность хранить все данные в собственном открытом формате ODF. Он одобрен международной организацией стандартизации ISO. Разработчики также предусмотрели встроенную функцию экспорта материалов в PDF формат одним кликом мыши. Кроме того, решение поддерживает технологию Flash. Удобный интерфейс легко изучить и использовать, в частности обладателям пакета Microsoft Office. Отметим, что использование приложения не требует лицензионных отчислений. Любой желающий может установить его на компьютер.

Следующее приложение, которое поддерживает работу с RTF называется Notepad2. Речь идет о быстром и маленьком текстовом редакторе, в котором реализована подсветка синтаксиса. Приложение обладает простым и привлекательным интерфейсом. Во время набора текста происходит подсчет строк. Notepad2 может работать без установки и не использует системный реестр. Присутствует здесь и удобная возможность поиска текста, обладающая расширенной функциональностью. Кроме того, инструмент может сворачиваться в трей. Реализована здесь и функция прозрачности.

Также в решении поставленной задачи нам может помочь AbiWord. Речь идет об инструменте для обработки текстовых документов. Он позволяет печатать, редактировать и создавать различные материалы, а также работать с письмами и сообщениями.

Кроме описанных программ, RTF (формат) можно открыть при помощи приложения LibreOffice.

Что ж продолжим наши изыскания на предмет получения текста из различных форматов данных. Не так давно мы с вами научились вытаскивать текст из zipped-xml-based файлов (odt и docx), а также, в начале этой недели, из pdf . Сегодня мы продолжим с обещанным rtf.

Rich Text Format (он же rtf), вы могли бы подумать, достаточно забытый, хотя и не очень сложный формат представления текстовых данных. Что ж, относительно несложный для получения текста, но за свою историю: от своей первой версии до текущей 1.9.1 - он приобрёл под 300 страниц официально документации и огромное количество надстроек, которые в большей степени нам будут мешать при получении plain text"а. Попробуем их обойти...

А что там внутри?

Как уж повелось давайте заглянем вовнутрь rtf-файла и посмотрим, что там внутри:

Что мы видим? Я вижу наше любимое стихотворение «Парус». Мы видим изначально текстовый 8-битный формат данных. Это уже радует - когда в исходных данных текст, понимать, что происходит, гораздо проще. Теперь давайте разберёмся, как эти самые данные прочитать. Для этого я расскажу немного теории по теме.

Будем считать, что rtf состоит из управляющих слов , которые могут быть сгруппированы во вложенные множества. Управляющие слово начинается на обратный слэш (\), группа обёрнута в фигурные скобки ({ и }).

Управляющие слово состоит из последовательности букв английского алфавита (от a до z) и может быть завершено численным параметром (возможно отрицательным). Как вариант, слово может содержать один не цифро-буквенный ascii-символ. Всё, что не подпадает под эти правила, не является частью управляющего слова. Таким образом, последовательность вида \rtf1\ansi\ansicpg1251 без проблем делится на три слова rtf с параметром 1 (major-версия формата), ansi (текущая кодировка) и ansicpg с параметром 1251 (текущая кодовая страница под номером 1251 - т.е. Windows-1251).

Группированные множества определяют область действия управляющих слов. Таким образом, управляющие слова описанные внутри фигурных скобок работают только внутри них и всех дочерних подмножеств. Для того, чтобы правильно отработать какие слова имеют место сейчас - требуется вести стек управляющих слов. При открытии фигурной скобки создавать новый элемент-массив в стеке, в который сразу же добавлять данные предыдущего слоя стека, при закрытии скобки - удалять самый верхний слой.

Ещё стоит отметить, что некоторые управляющие слова могут быть закрыты с помощью добавления параметра ноль, а не создания новой подгруппы. Например, следующие варианты эквивалентны: This is {\b bold} text , This is \b bold \b0 text = This is bold text .

Откуда брать текст?

С устройством нового для нас формата мы познакомились, теперь зададимся вопросом, а где брать текст. Тут всё не так сложно, как может показаться - текст надо брать там, где текущая последовательность не идентифицируется, как управляющее слово. С парой исключений, естественно.

Во-первых, стоит отметить, что исходная кодировка rtf-файла - это ANSI, поэтому без всякий изысков сохранится только, английский текст. Нас же интересует, как минимум, русский текст, а ещё лучше Unicode, не так ли? Что правда, то правда - rtf хоть и старый формат, но сгодится на сохранение и того и другого.

Итак, в rtf"е есть возможность использования второй половины таблицы ASCII, та что от 128 и выше. С учётом текущей кодировки (выше управляющее слово \ansicpg), конечно же. Для этого в RTF была введена последовательность вида \"hh , где hh - это двоичный hex-код символа из таблицы ASCII.

Ну и второй, более интересный вариант, это unicode-кодированные данные. Для них в формат включено лаконично короткое ключевое слово \uABCD с цифровым параметром ABCD. ABCD в данном случае код unicode-символа в десятичной системе счисления. Всё опять просто, как вы могли заметить.

Просто, да не очень. В rtf существует ещё одно ключевое слово \ucN , которое тесно связано с Unicode. Дело в том, что формат RTF очень рьяно поддерживает совместимость со старыми устройствами, на которых возможно придётся открывать данный файл. Как вариант, подобное устройство (ну например компьютер с Windows 3.11:) не сможет прочитать Unicode, что ему делать? Для этого после каждого unicode-символа, шифрованного ключевым словом \u может быть указано от нуля до нескольких символов, которые должны быть отображены в случае, если rtf-viewer не способен отобразить или разобрать текущие данные (по документации, если просмотрщик не может отобразить верно данные, он должен их пропустить).

В связи с этим, большинство современных редакторов после unicode-управляющего слова ставят символ вопроса, как знак, что требуется показать вместо текущего символа. Но возможны и варианты, например: Lab\u915GValue . Зададимся вопросом - сколько символов требуется отобразить, если нет возможности показать Unicode. Всё опять же не очень сложно - указанное выше ключевое слово \ucN в качестве параметра N как раз и предоставляет это значение. Т.е. перед Unicode-данными обязательно появится что-то типа \uc1 , что скажет нам пропустить один символ после unicode"а.

Давайте почитаем!

Похоже, что накопленных нами данных будет достаточно, чтобы прочитать наши первые rtf-файлы. Поехали:
  1. function rtf_isPlainText($s ) {
  2. $failAt = array ("*" , "fonttbl" , "colortbl" , "datastore" , "themedata" ) ;
  3. for ($i = 0 ; $i < count ($failAt ) ; $i ++ )
  4. if (! empty ($s [ $failAt [ $i ] ] ) ) return false ;
  5. return true ;
  6. function rtf2text($filename ) {
  7. $text = file_get_contents ($filename ) ;
  8. if (! strlen ($text ) )
  9. return "" ;
  10. $document = "" ;
  11. $stack = array () ;
  12. $j = - 1 ;
  13. for ($i = 0 ; $i < strlen ($text ) ; $i ++ ) {
  14. $c = $text [ $i ] ;
  15. switch ($c ) {
  16. case "\\ " :
  17. $nc = $text [ $i + 1 ] ;
  18. if ($nc == "\\" && rtf_isPlainText($stack [ $j ] ) ) $document .= "\\" ;
  19. elseif ($nc == "~" && rtf_isPlainText($stack [ $j ] ) ) $document .= " " ;
  20. elseif ($nc == "_" && rtf_isPlainText($stack [ $j ] ) ) $document .= "-" ;
  21. elseif ($nc == "*" ) $stack [ $j ] [ "*" ] = true ;
  22. elseif ($nc == """ ) {
  23. $hex = substr ($text , $i + 2 , 2 ) ;
  24. $document .= html_entity_decode ("" . hexdec ($hex ) . ";" ) ;
  25. $i += 2 ;
  26. } elseif ($nc >= "a" && $nc <= "z" || $nc >= "A" && $nc <= "Z" ) {
  27. $word = "" ;
  28. $param = null ;
  29. for ($k = $i + 1 , $m = 0 ; $k < strlen ($text ) ; $k ++, $m ++ ) {
  30. $nc = $text [ $k ] ;
  31. if ($nc >= "a" && $nc <= "z" || $nc >= "A" && $nc <= "Z" ) {
  32. if (empty ($param ) )
  33. $word .= $nc ;
  34. else
  35. break ;
  36. } elseif ($nc >= "0" && $nc <= "9" )
  37. $param .= $nc ;
  38. elseif ($nc == "-" ) {
  39. if (empty ($param ) )
  40. $param .= $nc ;
  41. else
  42. break ;
  43. } else
  44. break ;
  45. $i += $m - 1 ;
  46. $toText = "" ;
  47. switch (strtolower ($word ) ) {
  48. case "u" :
  49. $toText .= html_entity_decode ("" . dechex ($param ) . ";" ) ;
  50. $ucDelta = @ $stack [ $j ] [ "uc" ] ;
  51. if ($ucDelta > 0 )
  52. $i += $ucDelta ;
  53. break ;
  54. case "par" : case "page" : case "column" : case "line" : case "lbr" :
  55. $toText .= "\n " ;
  56. break ;
  57. case "emspace" : case "enspace" : case "qmspace" :
  58. $toText .= " " ;
  59. break ;
  60. case "tab" : $toText .= "\t " ; break ;
  61. case "chdate" : $toText .= date ("m.d.Y" ) ; break ;
  62. case "chdpl" : $toText .= date ("l, j F Y" ) ; break ;
  63. case "chdpa" : $toText .= date ("D, j M Y" ) ; break ;
  64. case "chtime" : $toText .= date ("H:i:s" ) ; break ;
  65. case "emdash" : $toText .= html_entity_decode ("—" ) ; break ;
  66. case "endash" : $toText .= html_entity_decode ("-" ) ; break ;
  67. case "bullet" : $toText .= html_entity_decode ("•" ) ; break ;
  68. case "lquote" : $toText .= html_entity_decode ("‘" ) ; break ;
  69. case "rquote" : $toText .= html_entity_decode ("’" ) ; break ;
  70. case "ldblquote" : $toText .= html_entity_decode ("«" ) ; break ;
  71. case "rdblquote" : $toText .= html_entity_decode ("»" ) ; break ;
  72. default :
  73. $stack [ $j ] [ strtolower ($word ) ] = empty ($param ) ? true : $param ;
  74. break ;
  75. if (rtf_isPlainText($stack [ $j ] ) )
  76. $document .= $toText ;
  77. $i ++;
  78. break ;
  79. case "{" :
  80. array_push ($stack , $stack [ $j ++ ] ) ;
  81. break ;
  82. case "}" :
  83. array_pop ($stack ) ;
  84. $j --;
  85. break ;
  86. case "\0" : case "\r" : case "\f" : case "\n" : break ;
  87. default :
  88. if (rtf_isPlainText($stack [ $j ] ) )
  89. $document .= $c ;
  90. break ;
  91. return $document ;
Код с комментариями вы можете получить на