プレビューの処理
これも実に簡単で、C1PrintDocumentコンポーネントのプロパティに、RichTextコントロールのデータを設定するだけです。後は、すべてC1PrintDocumentコンポーネントが処理を行ってくれます。
この処理は、ツールバーの[プレビュー]ボタンに設定します。
まず、Form2への参照が行えるように、Form2のインスタンスを作成します。そして、C1PrintDocumentコンポーネントのBodyオブジェクトの中のChildrenコレクションに、RichTextコントロールのデータを追加します。このとき、RenderRichTextメソッドを使用して、RichTextコントロールのリッチテキストデータを、RenderObjectにしてから追加します。
C1PrintDocumentコンポーネントのBodyオブジェクトは、プレビューのページ本体を表すオブジェクトで、プレビューに表示されるデータは「レンダリングオブジェクト」と呼ばれるオブジェクトで表されます。このBodyオブジェクトのChildrenコレクションには、ドキュメントのすべてのレンダリングオブジェクトが含まれるので、ここにRichTextコントロールのデータをレンダリングオブジェクトにして追加する、という形を取ります。
一方、RichTextコントロールのデータを取得するにはいくつかの方法があります。Textプロパティは純粋なテキストデータのみを格納するプロパティで、Rtfプロパティは文字属性を含めたリッチテキストデータを格納するプロパティです。従って、ユーザーが設定したフォントや文字色も含めたデータを取得したければ、Rtfプロパティを参照し、この値を取り出して使用します。
RenderRichTextメソッドは、このRtfデータをそのままレンダリングオブジェクトに変換してくれるメソッドなので、これを使うことでRichTextコントロールで設定された文字属性をそのままC1PrintPreviewControlコンポーネントで表示させることができるようになります。
Private Sub ToolStripButton3_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles ToolStripButton3.Click Dim previewform As New Form2 With previewform .C1PrintDocument1.Body.Children.Add( _ New RenderRichText(RichTextBox1.Rtf)) .C1PrintDocument1.Generate() .Show() End With End Sub
private void toolStripButton3_Click(object sender, EventArgs e) { Form2 pf = new Form2(); pf.Show(); pf.c1PrintDocument1.Body.Children.Add( new C1.C1Preview.RenderRichText(richTextBox1.Rtf)); pf.c1PrintDocument1.Generate(); }
Form2の処理コードはありません。プレビューの拡大表示や印刷処理、ファイルへの保存処理などはすべてC1PrintPreviewControlコンポーネントに組み込まれています。
まとめ
印刷プレビュー機能は、表示倍率の設定やペインによるページ指定、複数ページの表示機能など多彩な機能を持たせる必要があり、これを自作するとなると相当大変な作業になります。C1PrintPreviewControlコンポーネントは、これらプレビューに必要な機能をすべて実装しており、プロパティやメソッドの操作ですぐにアプリケーションに組み込める、大変魅力的なコンポーネントです。このコンポーネントを使うことで開発の工数をかなり削減させることができるのではないでしょうか。
今回は簡単なワープロを作ってみましたが、画像処理ソフトや表計算、データベースのフロントエンドアプリケーションでも印刷・プレビュー機能を組み込むことができ、その守備範囲はかなり広いものになっています。
いろいろなアプリケーションを作ってみたくなる、便利なコンポーネントだと言えます。