XPS2XAML
長い間、文書を作るには、「テキストエディタで文章を書き、後で整形する」のが常識だと思ってきました。これは、パソコンで日本語を扱う困難さから来ており、使用するソフトウエアでの差異が大きかったことによります。また、入力効率が悪く、最終的な清書にしか使えなかったことも原因です。 経験の長い人ほど、パソコンで日本語を扱う困難さ知っているわけですが、少し変化が起きているのかも知れません。それは、ワードなど文書作成ソフトウエアの出力がXML形式になり、標準化もされ、他のプログラムの入力になりうる状態になっていることです。
※単にXPSを表示したいだけならな変換の必要はありません。Silverlightでも多少のコードで表示できます。「SilverlightとWPFでのXPSファイルの表示」
1.「考える道具としての」ワード
文章を書く理由は色々でしょうが、最大の需要は「考えをまとめる」ことにあると思います。そのためには以下のことが必要です。
- 文章の入力効率が高いこと
- 図、表を入れた状態で編集できること
- 図、表を任意に配置できること
- 図、表も編集できること
- 特に表については、行、列ともに自由に変更できること
また、張り付けたテキストに、後から罫線が引けること
- 図については、任意のサイズにできること
- 段組みできること
- 章建てができ、番号が振れること
- 箇条書きができること
- 文字の大きさ、色、ボールド、下線が使えること
このページを書いているのは、HTMLマークアップ用のFCKエディタで、概ね良いのですが、以下のようなことがあります。
- 表の横のには文章が配置できない。
- 表をインデントできない。
- 表の枠線を辺ごとに独立に制御出来ない。(制御できればインデントに使える)
- 図の横には文章を配置できるが、箇条書きを入れるとインデントが崩れる。
と、言った色々の制約があります。これらはエディタの制約と言うより、HTMLマークアップとブラウザの機能による問題だと思います。
ワード(Microsoft Office Word 2007)なら、「考える道具」になります。 いままでは、ワードは終着駅(清書して完了)だと思い込んでいたのですが、ホームページやプログラミングに使えることを知りました。
2.XPS2XAML
最近やっと、理解できたことは以下のことです。
- ワードは、XPS形式で出力できる。
(PDFも出力できますが、同じ目的でXPSにすることができます。)
- XPSは、フォルダを圧縮したもので、内容はXMLファイルから成る。
- 特に、文書自体はXAMLとして使える。
と、言うことです。 そこで、XPSファイルから XAMLファイルを作るプログラム、XPS2XAMLを作りました。
- XAMLファイルは、直接ブラウザで開くことができます。
- XAMLファイルは、HTMLマークアップでホストできます。
- WPFアプリケーションのXAMLとして使えます。
- SilverlightアプリケーションのXAMLとして使えます。
3.XPS2XAMLの出力の種類
3.1.リソースの配置
XPSファイルは、フォルダを圧縮した形をしています。これは、文書が単一のファイルで表されておらず、XAMLマークアップ記述以外の情報があるためです。 その情報は、フォントとイメージです。ワードで文書を作成するときに使用した文字だけから成るフォント・ファイルが作られます。また、文書に貼り付けた図もイメージファイルとして含まれます。 これらの情報は、XAMLファイルからの参照として記述されるので、利用する局面で異なる対応が必要になります。
3.2.Glyphs か TexiBlock か
XPS上では文字を <Glyphs>タグを使って表しています。このタグの特徴は、フォントファイルを必ず指定することと、各文字の幅などを指定できることにあります。 一方、WPFアプリケーションなど、プログラミングでは、<TextBlock>、<Label>、<TextBox>などが使われ、<Glyphs>はあまり見かけません。
3.3.複数フォントの使用について
普通にワードを使えば、英字の箇所は英語用フォントになり、複数のフォントの混じった文書になります。 英字の世界では、文字ごとに幅が異なったり、fiは合字されたりするもののようです。 わたしが無知なだけかも知れませんが、これらは、日本語の文章の中では不要だと考えています。 また、ホームページをブラウズするようなケースでは、ブラウザの動いているパソコンにあるフォントが使われます。単一フォントなら、フォントが置き換えられても問題が少ないことが期待できます。
3.4.出力の種類
以上のことから、どんな出力オプションを用意すれば良いかまとめて見ます。
3.4.1.フォント
| 利用局面 |
フォントファイルの配置 |
生成する参照 |
コントロール/フォント |
Webページ |
サーバ上のイメージ用フォルダ |
絶対的なURL |
Glyphs、TTF |
| XAMLと同じフォルダの下 |
相対的なURL |
Glyphs、TTF |
| ブラウザ側のフォントを使う |
フォントファミリを指定 |
TextBlock |
HTMLで ホスト |
サーバ上のイメージ用フォルダ |
絶対的なURL |
Glyphs、TTF |
| XAMLと同じフォルダの下 |
相対的なURL |
Glyphs、TTF |
| ブラウザ側のフォントを使う |
フォントファミリを指定 |
TextBlock |
|
WPF アプリケーション |
プロジェクトにイメージファイルを「追加」する。自動的にビルドアクションが「Resouce」になる。 |
ソリューションエクスプローラの表示のプロジェクトからの相対的なファイル名 |
Glyphs、TTF |
| 実行環境のフォントを使う |
フォントファミリを指定 |
TextBlock |
Silverlight アプリケーション |
プロジェクトにイメージファイルを「追加」する。自動的にビルドアクションが「Resouce」になる。 |
ソリューションエクスプローラの表示のプロジェクトからの相対的なファイル名(開始が'/'でない) |
Glyphs、ODTTF |
| Silverlight実行環境フォント(Portable User Interface)を使用 |
フォントファミリを指定しない |
TextBlock |
3.4.2.イメージ
| 利用局面 |
イメージファイルの配置 |
生成する参照 |
Webページ |
サーバ上のイメージ用フォルダ |
絶対的なURL |
| XAMLと同じフォルダの下 |
相対的なURL |
HTMLで ホスト |
サーバ上のイメージ用フォルダ |
絶対的なURL |
| XAMLと同じフォルダの下 |
相対的なURL |
|
WPF アプリケーション |
プロジェクトにイメージファイルを「追加」する。自動的にビルドアクションが「Resouce」になる。 |
ソリューションエクスプローラの表示のプロジェクトからの相対的なファイル名 |
Silverlight アプリケーション |
プロジェクトにイメージファイルを「追加」する。自動的にビルドアクションが「Resouce」になる。 (PNG,JPEGに限られる) |
ソリューションエクスプローラの表示のプロジェクトからの相対的なファイル名(開始が'/'でない) |
プロジェクトにイメージファイルを「追加」する。自動的にビルドアクションを「コンテンツ」にする。 (PNG,JPEGに限られる) |
ソリューションエクスプローラの表示のプロジェクトをルートとした絶対的なファイル名(開始が'/'となる) |
※イメージの表示は、ImageBrush が使われます。Silverlightは、ImageBrush の属性が異なり、特別に扱います。
4.XPSビューアで見たように
変換結果を、ワードの表示と見比べてみると、文字の色が少し異なります。普通のテキストは、ワードでは一様な黒に見えますが、変換結果では感じがやや薄くなっています。 XPSビューアの表示とは差がありません。 ワードの編集画面の方がきれいなのは残念ですが、これで良しとします。
5.Windows上でのXAMLファイルの編集
変換結果を Visual Studio で開いて気が付きました。文字が □ と表示され、正しい文字が表示されていません。 実行やデザイナの表示には問題ありません。 これは、Unicode の BMP外の文字(0xffff以上の文字コード)の箇所です。 この文字は、XPS上でも特別に扱われ、文字としてではなく、"𝑥"のようなコード表記がされています。 もう、Unicodeの対応は終わった話かと思っていましたが、BMP外は完全には対応されていないようです。 Blendでは正しくXAMLのテキストが表示できます。
|