mikeo_410


XPS2XAML

ダウンロード: http://www.vector.co.jp/soft/winnt/prog/se479391.html

  長い間、文書を作るには、「テキストエディタで文章を書き、後で整形する」のが常識だと思ってきました。これは、パソコンで日本語を扱う困難さから来ており、使用するソフトウエアでの差異が大きかったことによります。また、入力効率が悪く、最終的な清書にしか使えなかったことも原因です。
  経験の長い人ほど、パソコンで日本語を扱う困難さ知っているわけですが、少し変化が起きているのかも知れません。それは、ワードなど文書作成ソフトウエアの出力がXML形式になり、標準化もされ、他のプログラムの入力になりうる状態になっていることです。

  ※単にXPSを表示したいだけならな変換の必要はありません。Silverlightでも多少のコードで表示できます。「SilverlightとWPFでのXPSファイルの表示」

1.「考える道具としての」ワード

  文章を書く理由は色々でしょうが、最大の需要は「考えをまとめる」ことにあると思います。そのためには以下のことが必要です。

  1. 文章の入力効率が高いこと
  2. 図、表を入れた状態で編集できること
  3. 図、表を任意に配置できること
  4. 図、表も編集できること
  5. 特に表については、行、列ともに自由に変更できること
    また、張り付けたテキストに、後から罫線が引けること
  6. 図については、任意のサイズにできること
  7. 段組みできること
  8. 章建てができ、番号が振れること
  9. 箇条書きができること
  10. 文字の大きさ、色、ボールド、下線が使えること

  このページを書いているのは、HTMLマークアップ用のFCKエディタで、概ね良いのですが、以下のようなことがあります。

  1. 表の横のには文章が配置できない。
  2. 表をインデントできない。
  3. 表の枠線を辺ごとに独立に制御出来ない。(制御できればインデントに使える)
  4. 図の横には文章を配置できるが、箇条書きを入れるとインデントが崩れる。 

  と、言った色々の制約があります。これらはエディタの制約と言うより、HTMLマークアップとブラウザの機能による問題だと思います。

  ワード(Microsoft Office Word 2007)なら、「考える道具」になります。
  いままでは、ワードは終着駅(清書して完了)だと思い込んでいたのですが、ホームページやプログラミングに使えることを知りました。

2.XPS2XAML

  最近やっと、理解できたことは以下のことです。

  1. ワードは、XPS形式で出力できる。
    (PDFも出力できますが、同じ目的でXPSにすることができます。)
  2. XPSは、フォルダを圧縮したもので、内容はXMLファイルから成る。
  3. 特に、文書自体はXAMLとして使える。

  と、言うことです。
  そこで、XPSファイルから XAMLファイルを作るプログラム、XPS2XAMLを作りました。

  1. XAMLファイルは、直接ブラウザで開くことができます。
  2. XAMLファイルは、HTMLマークアップでホストできます。
  3. WPFアプリケーションのXAMLとして使えます。
  4. 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上でも特別に扱われ、文字としてではなく、"&#119909"のようなコード表記がされています。
  もう、Unicodeの対応は終わった話かと思っていましたが、BMP外は完全には対応されていないようです。
  Blendでは正しくXAMLのテキストが表示できます。


mikeo_410@hotmail.com