PDFファイル出力機能を組み合わせる
最後に、売上管理アプリケーションということなので、簡単な帳票を作成してみたいと思います。売上管理データなので、PDFファイルで作成してみましょう。PDFファイルを作成するには、C1PdfDocumentコンポーネントを利用します。C1PdfDocumentコンポーネントは、C1Studioに収録されているPDFに関するコンポーネントです。
では、実際にPDFファイルの作成に入っていきたいと思います。今までと同様に、C1PdfDocumentコンポーネントを画面上に貼り付けます(C1Ribbonコントロールと同様にツールボックスにC1PdfDocumentコンポーネントを追加してください。そしてホームタブPDFグループの「PDF出力」ボタンからイベントを呼び出します。
次に、プログラムを作成していきます。
this.c1PdfDocument1.Clear(); this.c1PdfDocument1.DocumentInfo.Title = "タイトル";
まず、C1PdfDocumentコンポーネントを初期化し、PDFファイルのタイトルを設定します。このタイトルは、ファイルのプロパティで確認することが可能です。
RectangleF rcPage = this.c1PdfDocument1.PageRectangle; rcPage.Inflate(-100, -100);
ページ全体の領域を取得し、上下左右のマージンを差し引いてデータの描画領域を決定します。
次に、帳票のタイトル(見出し)を描画したいと思います。
// 高さを取得し設定します。 rc.Height = this.c1PdfDocument1.MeasureString("タイトル(見出し)", "フォント", rc.Width).Height; // タイトルを描画します。 this.c1PdfDocument1.DrawString("タイトル(見出し)", "フォント", Brushes.Black, "描画領域"); // 描画位置の調整を行う。 rc.Offset(0, rc.Height + 5);
MeasureStringメソッドを利用し、描画領域の高さを設定します。DrawStringメソッドを利用し、タイトルを描画します。文字色を変更する場合は、Brushes.Blackを変更してください。最後に描画したタイトルの高さ分+行間分の描画位置をずらします。
次に、ヘッダ部分を描画します。基本的な流れは、タイトルの描画と同じになります。ただ、タイトルの場合と違い、複数列になるため、横幅を算出する必要があります(本アプリケーションでは単純に列数で除算しています。また、描画領域の高さについても1番高いセルの値を取得して決定しています)。
// 横幅を算出 rcCell.Width = rc.Width / fields.Length; // 高さを取得し、より高い方を選択して設定する。 float height = this.c1PdfDocument1.MeasureString("ヘッダ文字列", "フォント", rcCell.Width).Height; rcCell.Height = Math.Max(rcCell.Height, height);
後は、描画領域を塗り潰し、ヘッダ文字列を描画します。最後に、描画位置の調整を行って、ヘッダの描画は終了になります。
// セルの塗り潰し this.c1PdfDocument1.FillRectangle(Brushes.Black, rcCell); // ヘッダの描画 this.c1PdfDocument1.DrawString("ヘッダ文字列", "フォント", Brushes.White, rcCell); // 横幅の分だけ、位置を調整する。 rcCell.Offset(rcCell.Width, 0);
最後にデータ部分の描画を行います。
データ部分についても、ヘッダ部分と同様の処理になります。ただ、データ部分には数値データと文字列データ、日付データが存在します。せっかくなので、数値データを左詰め、その他のデータ型は右詰めにしてみたいと思います。
StringFormat sf = new StringFormat(); // double型に変換可能か確認する。 double d; sf.Alignment = (double.TryParse("データ", out d)) ? StringAlignment.Far : StringAlignment.Near; // セル内にデータを描画します。 this.c1PdfDocument1.DrawString("データ", "フォント", Brushes.Black, rcCell, sf);
数値型か、その他のデータ型かは、double型に変換可能かどうかで判断しています。
数値型の場合は、StringAlignment.Farを、その他の型の場合はStringAlignment.Nearを設定します。後は、DrawStringメソッドの実行時にStringFormatを指定してデータ文字列を描画します。
後は、C1PdfDocumentコンポーネントのSaveメソッドでファイルを保存して終了になります。なお、サンプルアプリケーションでは改ページの処理も実装しています。
PDFファイルにパスワードを設定する
作成したPDFファイルは売上情報なので機密情報になる可能性があります。そこで、最後にPDFファイルにパスワードを設定してみたいと思います。ここで設定するパスワードは、PDFファイルを開くときに必要なパスワードです。
ホームタブPDFグループにある「パスワード付き」がチェックされており、かつ「パスワード」に文字列が入力された状態で「PDF出力」ボタンがクリックされた場合、以下の処理が実行されるようにします。
this.c1PdfDocument1.Security.UserPassword = "パスワード文字列";
パスワードの設定を行うには、PdfSecurityクラスのUserPasswordプロパティを設定するだけです。これで、パスワードを知らないユーザーはPDFファイルを開くことができなくなり、PDFファイルのセキュリティを高めることが可能になります。
まとめ
今回は、C1Ribbonコントロールを利用し、画面の見た目を大幅に変更してみました。Excel形式、XML形式での出力や、読込、C1PdfDocumentコンポーネントを利用したPDFファイルの作成とパスワード設定を行いました。各種コントロールの組み合わせにより、少しのプログラミングで、大幅な機能改善が行えたと思います。
次回は、チャートコンポーネントとの連携を行い、FlexGridで入力した値をグラフ形式での表示など、さらなる機能充実を図って行きたいと思います。