SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

テキストファイルをRTFテキストに変換してPDF化するアプリケーション

C1PdfDocumentコンポーネントを使ったドキュメント変換アプリの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

簡単なRTFテキストのPDF化処理の作成 2

カラーテーブルの作成

 文字色や線などにカラーを使用するには、RTFファイルごとにカラーテーブルを作成する必要があります。そして、色を指定するタグでは、このカラーテーブルの中からどの色を使用するのかを、パレットの中のその色がある位置を番号で指定します。

 通常、WordなどのRTF対応アプリケーションでは、入力文書をファイルに保存する際、リッチテキストフォーマットの先頭にカラーテーブルを作成してくれるので特にユーザーが作成する必要はありません。しかし、自作でRTFドキュメントを作成する場合は、ドキュメント内で使用する色のリストをカラーテーブルとして作成する必要があります。

 カラーテーブルは、\colortblというタグと、色をRGBで表すための\red\green\blueの4つのタグを使用します。

 例えば、黒色を使用したければ、

{\colortbl;\red0\green0\blue;}

 と記述します。黒と白の2色を使いたければ、\red\green\blueタグの記述を;で区切って2個作成します。

{\colortbl;\red0\green0\blue0;\red255\green255\blue255;}

 こうして、使いたい色の数だけ\red\green\blueタグの記述を;で区切って作成します。

 次のコードは、15色のカラーテーブルを作成します。

{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255
\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0
\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0
\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0
\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128
\green128\blue128;}

 カラーテーブルの色を使用する場合は、その位置を番号で指定します。このカラーテーブルの青色を使いたければ、2番目の\red0\green0\blue255を指定します。

 カラーテーブルは、必ず1行で作成し、行末は;}で終わるようにします。そして、RTF化する文字列の先頭に記述します。

PDF作成の準備

 では、処理を組み立てていきましょう。

 最初に、PDF化の準備処理を作成します。まず、2つの名前空間への参照を宣言しておきます。C#は、デフォルトで「System.Text」への参照が設定されていますから、「System.IO」だけ参照するようにします。

 そして、PDFドキュメントに使用するフォントと描画領域を作成します。

Visual Basic
Imports System.IO
Imports System.Text

Private Sub Button1_Click(ByVal sender As System.Object, _
         ByVal e As System.EventArgs) Handles Button1.Click
    Dim font As New Font("MSゴシック", 12)
    Dim rc As RectangleF = Me.C1PdfDocument1.PageRectangle
    rc.Inflate(-72, -72)
C#
using System.IO;

private void Button1_Click(object sender, EventArgs e)
{
    Font font = new Font("MSゴシック", 12);
    RectangleF rc = c1PdfDocument1.PageRectangle;
    rc.Inflate(-72, -72);

 次に、カラーテーブルを作成します。今回は、8色のテーブルを作ります。1行の文字列にして、変数に格納します。

Visual Basic
Dim s As String
    s = "{\colortbl;\red0\green0\blue0;\red0\green0\blue255;" & _
          "\red0\green255\blue255;\red0\green255\blue0;" & _
          "\red255\green0\blue255;\red255\green0\blue0;" & _
          "\red255\green255\blue0;\red255\green255\blue255;}"
C#
String s;  
    s = "{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;" +
      "\\red0\\green255\\blue255;\\red0\\green255\\blue0;" +
      "\\red255\\green0\\blue255;\\red255\\green0\\blue0;" +
      "\\red255\\green255\\blue0;\\red255\\green255\\blue255;}";

 そして、表示する文字列にタグをつけます。使用する文字列はなんでも構いませんが、ここでは「To boldly go where no one has gone before!」という英文を使用しています。

 文字とタグの間にスペースを入れて、RTFリーダーアプリケーションがきちんとタグを認識できるようにしてください。

Visual Basic
s &= "To {\b boldly} {\tab go where} 
{\i {\fs40 {\cf2 no one \par}}} has {\cf6 gone before!}"
C#
s += "To {\\b boldly} {\\tab go where} 
{\\i {\\fs40 {\\cf2 no one \\par}}} has {\\cf6 gone before!}";

 最後に、作成したRTFテキストを、C1PdfDocumentコンポーネントのDrawStringRtfメソッドの引数に指定して実行します。DrawStringRtfメソッドは、DrawStringメソッドと同じようなメソッドですが、指定する文字列がRTFテキストになっています。

 そして、PDF文書の保存と表示を実行します。この部分は前回作成したものとほぼ同じ処理をサブルーチンにまとめています。

Visual Basic
Me.C1PdfDocument1.DrawStringRtf(s, font, Brushes.Black, rc)
savepdf()
C#
c1PdfDocument1.DrawStringRtf(s, font, Brushes.Black, rc);
savepdf();
文字単位で装飾を変えたり、タブ移動や改行が行える
文字単位で装飾を変えたり、タブ移動や改行が行える

次のページ
テキストファイルを読み込んでRTF化を実行する処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1874 2008/06/24 15:07

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング