SHOEISHA iD

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

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

組み合わせの達人

組み合わせの達人-リボンインターフェースやエクスポート機能を組み合わせる

第3回 ComponentOne Studioを利用して簡単な売上管理アプリケーションを作成する

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

ダウンロード サンプルソース (1.4 MB)

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ファイルを開くときに必要なパスワードです。

 ホームタブPDFグループにある「パスワード付き」がチェックされており、かつ「パスワード」に文字列が入力された状態で「PDF出力」ボタンがクリックされた場合、以下の処理が実行されるようにします。

this.c1PdfDocument1.Security.UserPassword = "パスワード文字列";

 パスワードの設定を行うには、PdfSecurityクラスのUserPasswordプロパティを設定するだけです。これで、パスワードを知らないユーザーはPDFファイルを開くことができなくなり、PDFファイルのセキュリティを高めることが可能になります。

まとめ

 今回は、C1Ribbonコントロールを利用し、画面の見た目を大幅に変更してみました。Excel形式、XML形式での出力や、読込、C1PdfDocumentコンポーネントを利用したPDFファイルの作成とパスワード設定を行いました。各種コントロールの組み合わせにより、少しのプログラミングで、大幅な機能改善が行えたと思います。

 次回は、チャートコンポーネントとの連携を行い、FlexGridで入力した値をグラフ形式での表示など、さらなる機能充実を図って行きたいと思います。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
組み合わせの達人連載記事一覧

もっと読む

この記事の著者

高山 昌悟(タカヤマ ショウゴ)

今までは主に、Windowsアプリケーションの開発を行ってきました。最近はWebアプリケーションの開発を行っています。

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3389 2008/12/18 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング