Rich Text Format

**Rich Text Format**（RTF, リッチテキストフォーマット）は、文書ファイルフォーマットの1つ。交換・編集可能なクロスプラットフォームの文書フォーマットとして1987年からマイクロソフトにより開発され、仕様の策定が進められた。多くのワープロソフトで読み書き可能。ファイル拡張子は「.rtf」。

プレーンテキストに比べて、文字のフォント・大きさ・色や太字・斜体などの装飾指定、画像の表示、文字揃え（左揃え／中央揃え／右揃え）、箇条書き、表などの簡易レイアウトを行える特徴があり、比較的簡易なワープロソフトのデータフォーマットの一つとして位置づけられている。

また、PDFは主に閲覧・印刷を目的とした交換フォーマットであるのに対して、RTFは編集可能な交換フォーマットとなっている。

## 仕様
1992年にRich Text Formatの仕様であるRTF 1.0が公開され、2007年1月にRTF 1.9となっている。

* 1992年6月 RTF 1.0
* 1994年1月 RTF 1.3
* 1995年9月 RTF 1.4
* 1997年4月 RTF 1.5
* 1999年5月 RTF 1.6
* 2001年8月 RTF 1.7
* 2004年4月 RTF 1.8
* 2007年1月 RTF 1.9
* 2008年3月 RTF 1.9.1

### バージョンの履歴
* RTF 1.3の仕様はMicrosoft Word 6.0の機能をすべて含んでいる。※ただし日本語版に関しては一部機能が後述するRTF-Jに含まれる。以下同様。
* RTF 1.4の仕様はWord 7.0の機能をすべて含んでいる。
* RTF 1.5の仕様はWord 95 Version 7.0とWord 97で追加された命令語に対応した。
* RTF 1.6の仕様は、上記のほかWord 2000、Macintosh版Word 98などで追加された命令語をサポートするほか、Pocket Word、Exchange向け仕様（RTF ⇔ HTML変換に使用）を含む。
* RTF 1.7の仕様は上記のほかWord 2002で追加された命令語をサポートする。
* RTF 1.8の仕様はWord 2003の新機能をサポートする。
* RTF 1.9.1の仕様はWord 2007の新機能をサポートする。ほかPocket Word、RichEdit、Exchange、Microsoft Outlook向けの追加機能がある。さらに以下をサポートする。
** XMLマークアップ、名前空間のカスタム定義をサポート※XMLの利用方法についてはOffice Open XML仕様 (Ecma-376, Part4) を参照。
** カスタムXMLスキーマのバリデーション
** XML形式に保存する際にはXSLを出力できる（仕様書には記述無し）
** RTF内にOMMLを記述できる
** 読み込み専用パスワードでRTFを保護できる

マイクロソフトはRTFの仕様を1.9.1以上には更新しないと言明しているが、ISO/IEC 29500策定の間に小さい修正を加えたい意向である。機能面には影響はないと見られる。

Rich Text Format (RTF) の仕様はMicrosoft WordとOfficeのメジャーバージョンアップの度に改訂されている。

### コード例
RTFのデータはテキスト形式を用いており、プレーンテキストに装飾やレイアウトのための制御用の文字列を付加した形式となっている。後に現れたHTMLなどのマークアップ言語とは表記方法が異なる。

RTFの予約文字は`{}\`の3種のみである。`{}`はブロックを定義し、`\`に続く文字列・記号は命令語として解釈される。パラメータを取る場合もある。バージョンの違いなどにより解釈できない場合は無視される。改行文字には意味はなく、改行はそれに対応した命令語によって行われる。

* RTFの一例:

 {\rtf
 Hello!\par
 This is some {\b bold} text.\par
 }

上のサンプルは下のように表示される。

Hello!
This is some **bold** text.


## 文字エンコーディング
標準的なRTFファイルは7ビットのASCII文字で記述されているが、エスケープシーケンスを使うことでそれ以外の文字を扱える。コードページのエスケープのほか、RTF 1.5以降ではUnicodeのエスケープができる。

RTF 1.5よりも前のバージョンでは、7ビット文字以外は16進数のエスケープシーケンス (`\'xx`) で記述された。またRTF 1.5以降において、Unicodeで32767以降の文字は負の数で表現され、Unicode planeに収まらない文字はサロゲートペアで表現される。

コードページは`\ansicpg''N''`などの命令で指定される。例えば日本語のリッチテキスト文書では通例`\ansicpg932`によりMicrosoftコードページ932が指定され、日本語の文字はシフトJISコードを16進数のエスケープシーケンスで表した記法が用いられる。たとえば、`\'82\'a0\'82\'a2\'82\'a4`のように表記され、これは「あいう」を表している。

## 人間にとっての可読性
ワードプロセッサのファイル形式は、データ量削減などの観点からバイナリ形式を採用しているものもあり、人間が直接読めないことも多いが、RTFはプレーンテキストで記述されるので人間が読むことのできるフォーマットである。しかしながらMicrosoft Wordなどが出力するRTFは膨大な命令コードが入るため非常に読みにくくなる。さらに7ビットASCII以外の文字はすべてエスケープされるので、文字コードを知らない限り読めなくなる。

RTFは書式付きテキストであるが、本当の意味でのマークアップ言語ではないので、人が手で編集することは考慮されていない。またOLEオブジェクトなどが貼り付けられると、これも人には解読できない。

## 一般的な用途と相互運用性
大半のワードプロセッサではRTFの読み書きができるが、RTFのバージョン次第のところがある。未知の命令語が入っている場合は無視されてしまうことが多い。

### オブジェクト
MicrosoftのOLE、またMacintosh版のsubscriber objectsの貼り付けは、元のアプリがないとその部分を編集できないため相互運用性を妨げる。もし開いた文書に自分の持たないアプリで作成されたOLEオブジェクトがある場合、代替ビットマップが表示されるか、全く表示されない。

### 画像
JPEG、PNG, EMF, WMF, PICT, DIBがサポートされる。RTF作成ソフトは、サポート外のファイル形式 (BMP, TIFF, GIF等) を与えられた場合はPNG, WMFなどに変換して貼り付けるか、無視して表示しないようにする。

Microsoft Wordはレジストリに ("ExportPictureWithMetafile=0") の値を設定することで、WMFへの変換を禁止できる。

### フォント
フォントの埋め込みが仕様にあるが、広くサポートされてはいない。

またフォントにファミリー名（セリフ（明朝系）、サンセリフ（ゴシック系））を指定できるが、これも広くサポートされてはいない。

### 注釈
注釈機能があるが、OpenOffice（3.3時点）、LibreOffice（3.3.2時点）などでは注釈のインポートができないなど、サポートは限定的である。

### 描画オブジェクト

### セキュリティ上の注意

## RTF-J
バージョン1.3から1.9.1現在にかけて、主にWord向けに日本語用の独自拡張仕様があり、バージョン1.3から1.5ではRTF-Jと呼ばれる。バージョン1.6以降の仕様書では同様の拡張をFar East Support (1.6), East Asian Support (1.9.1) などと呼びつつ、仕様詳細部分では特に説明なくRTF-Jの呼称が使われている。

適切なマークアップを施すことでシフトJIS文字列を直接記述することもできるが、この仕様は7ビットのASCII文字で記述という大前提に反するものである。そのためのリーダーは単に全ビットをそのまま通せば良いわけではなく、下位バイトに`\`を含むシフトJIS文字、いわゆるダメ文字に対して正しく対応できなければならない。またこの機能は読み込みにのみ適用され、書き出す場合はエスケープされる。
Unicodeに関しては前述の通りRTF 1.5以降でサポートされているが、Unicode文字列の直接記述に関しては1.9.1現在でもサポートされていない。

RTF仕様のバージョンアップと同時に独自拡張仕様も追加されることがあるが、単体ではバージョン番号を持たず、拡張元のバージョンで区別される。

マイクロソフト製品以外ではほとんどサポートされない。

## RTFに対応したソフトウェア
オペレーティングシステムに付属するアクセサリソフトウェアをはじめ、多くのワープロソフトがRTFの読み書きに対応している。

例:
*ワードパッド - Microsoft Windows付属のソフトウェア
*テキストエディット - macOS付属のソフトウェア
*Pages - ワープロ・ページレイアウトソフトウェア
*LibreOffice - オフィスソフトウェア
*iText - テキストエディタ
*Jedit - Mac OS用のソフトウェア

Win32コントロールのRichEditは、リッチテキスト形式データの表示・編集およびクリップボード経由のコピー＆ペーストに対応している。

マイクロソフトのソフトウェア開発・実行環境である.NET Frameworkにおいて、Windows Formsの`RichTextBox`クラスにRTF対応の`LoadFile()`メソッド等が当初から実装されている。.NET Core 3.0以降にも移植されている。

## RTFD
NEXTSTEP、およびNEXTSTEPに由来する機能を持つmacOS・iOSでは、Rich Text Formatを拡張した**RTFD**（Rich Text Format Directory、添付書類付きRTF）というフォーマットも使われている。その実体は、独自拡張したRTFファイルと添付ファイルを、拡張子RTFDの同一フォルダに入れたものである。なおOSからは拡張子RTFDののフォルダは、単一のアーカイブファイルに見えるようになっている。

## 脚注

### 注釈

### 出典

## 関連項目
*ファイルフォーマット

## 外部リンク
*[Microsoft RTF1.6仕様 1999年5月](https://msdn2.microsoft.com/en-us/library/aa140277(office.10).aspx)
*Microsoft RTF1.7仕様 2001年8月
*Microsoft RTF1.8仕様 2004年4月
*Microsoft RTF1.9仕様 2007年1月
* &#x5b;MS-OXRTFCP&#x5d;: Informative References | Microsoft Learn
** Microsoft® Office Rich Text Format (RTF) Specification Version 1.9.1