添付書類付きリッチテキスト(.rtfd)の実態

リッチテキスト(.rtf)には画像を貼付けることも出来て、テキストエディットで画像ありの書類を保存してみると、添付書類付きリッチテキスト(.rtfd)として保存できた。

  • 画像を貼付けるにはドラッグ&ドロップ、またはコピー&ペーストでOK。

.rtfdの「d」はディレクトリの意味らしく、その名の通り保存された.rtfdは control-クリック して「パッケージの内容を表示」でその中身を見ることも出来た。つまり、XXXX.rtfdとはファイルではなく、フォルダ(ディレクトリ)ということだ。(以下のような感じ。)

  • XXXX.rtfdフォルダの中にはTXT.rtfと画像ファイルが入っていた。
  • TXT.rtfの中身は以下

そして、リッチテキストに添付する書類は画像に限らず、あらゆるオブジェクト(ファイルやフォルダ)が添付できるみたい。

  • 映像


  • 音楽


  • なんと、アプリケーションまで!
    • 最初、アプリケーションを貼付けるとアイコン画像だけがコピーされるのかと思ったが...
    • 実はしっかり、XXXX.rtfdの中にアプリケーションそのものがコピーされていた。
    • リッチテキスト上のアイコン画像をダブルクリックすれば、XXXX.rtfdにコピーされたアプリケーションがちゃんと起動するのであった。

自作のAppleScriptなんかを配布する時に、今までは説明文とスクリプトファイルを分けていたけど、リッチテキストにそのまま貼付けて説明文と一緒にしてしまうことも出来るはず。リッチテキスト上のアイコンをドラッグ&ドロップ、あるいはコピー&ペーストすれば、好みの場所にインストールすることが出来る。

もっと言えば、リッチテキストの中にその他のリッチテキストを貼付けることも出来る。だから、ルートのインデックス文書を作り、その中に必要な文書を放り込めば目次のようになるし、さらにその中に文書を貼付けて階層構造を持たせることも出来るのだ。(リンクと違って、トップページにジャンプする方法は無いけど。)

リッチテキストの立ち位置

リッチテキストで音楽や映像等が扱える(あまり需要はないと思うが)ことは分かったが、コンピュータ上で見る前提の書類ならHTMLで作成してしまうだろうと。それなら何でリッチテキスト形式が存在するのだろう?という疑問が湧いた。

  • すべてHTMLで良いじゃなかと...。
  • 今ならOpenDocument形式とかでもよいかも...。


Attributed Strings Programming Guide(素晴らしい翻訳に感謝!)を読んでみた勝手な解釈。

  • OSXの中で文字列を描画する時には、NSAttributedString(またはNSMutableAttributedString)というクラスが利用されている。
  • NSAttributedStringは文字列の様々なスタイル設定を、属性として保持する役割を担っている。
  • 編集した文字列は、ファイルに保存することになるだろう。その時、NSAttributedStringの属性をファイルに書き出す必要がある。
  • リッチテキスト(.rtfや.rtfd)はNSAttributedStringと親和性が高い。
    • AppleOSXがサポートしているテキスト属性に対応するように、rtf形式を独自に拡張している。
    • NSAttributedStringの属性とrtfのコマンドは、見た感じ、ほとんど1対1で対応している*1ようだ。
    • よって、NSAttributedStringの情報はリッチテキストを利用して完全にファイルに書き出すことができる。
    • 実際、NSAttributedStringは、リッチテキストを読み書きするメソッドをちゃんと実装しているのだ。


つまり、リッチテキストはスタイル付きのテキストを保存する最もOS寄りな形式(の一つ)なのであった。

  • だからリッチテキストはOSXで常にサポートされる形式であったのだ。*2
  • ちなみに、最新のテキストエディット1.5では以下の形式も(完全ではないと思うが)サポートされていた。
    • HTML
    • web アーカイブ*3
    • OpenDocument テキスト(odt)*4
    • Word 2007 フォーマット(docx)
    • Word 97 フォーマット(doc)
    • Word 2003 XML フォーマット

意外な活用方法

  • Safariを利用中にwebページ中に表示される画像ファイルだけ抽出したい。(リンク先の画像は除く)
    • webページ全体をコピーして、リッチテキストなテキストエディットにペースト。
    • 一旦保存して、ファイル.rtfdをcontrol-クリックしてパッケージの内容を表示。
    • ウィンドウをリスト表示にして、種類やサイズで並べ替えれば、必要な画像を抽出し易いと思う。
      • Firefoxならコピー&ペーストするまでもなく、html完全で保存したフォルダから同じように見つけ出せば良いのだけど。

*1:リッチテキストはさらに、部分的なテキストだけでなく、文書全体の設定を保存することも出来るが。

*2:OS9以前のかなり昔からサポートされていたはず。その頃、画像はリソースに保存されていた。

*3:Safariでwebページを保存する形式

*4:Open Officeなどのオフィス系アプリケションでテキスト文書を保存する時 の共通フォーマット