簡単な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ドキュメントに使用するフォントと描画領域を作成します。
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)
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行の文字列にして、変数に格納します。
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;}"
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リーダーアプリケーションがきちんとタグを認識できるようにしてください。
s &= "To {\b boldly} {\tab go where}
{\i {\fs40 {\cf2 no one \par}}} has {\cf6 gone before!}"
s += "To {\\b boldly} {\\tab go where} {\\i {\\fs40 {\\cf2 no one \\par}}} has {\\cf6 gone before!}";
最後に、作成したRTFテキストを、C1PdfDocumentコンポーネントのDrawStringRtfメソッドの引数に指定して実行します。DrawStringRtfメソッドは、DrawStringメソッドと同じようなメソッドですが、指定する文字列がRTFテキストになっています。
そして、PDF文書の保存と表示を実行します。この部分は前回作成したものとほぼ同じ処理をサブルーチンにまとめています。
Me.C1PdfDocument1.DrawStringRtf(s, font, Brushes.Black, rc)
savepdf()
c1PdfDocument1.DrawStringRtf(s, font, Brushes.Black, rc); savepdf();