Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

ComponentOne Studio for WPFでアプリケーションからWord、PDFを取り扱う

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/01/10 14:00

 業務アプリケーションで作成したデータを持ち出したい、または使いやすい形で出力したいという要望を受けることがあります。別のシステムへの取り込みであれば、CSVのような形式が一般的ですが、営業資料など、使う人がシステム的な知識が無い場合は、WordやPDFといった、専門的な知識無しで多くのPCで表示可能な形式が適しています。今回は、ComponentOne Studio for WPFを用いて、アプリケーションからWordやPDFファイルを取り扱う方法を紹介します。

今回紹介するコンポーネント

 本記事では以下の3つのコンポーネントを紹介します。

C1Word(Word Library for WPF)

 グレープシティ社の提供する、Word形式での出力に対応したコンポーネントで、ComponentOne Studio for WPFを導入することで利用可能になります。

 C1Wordではテキスト装飾だけでなく、画像やハイパーリンクなども利用することができます。

 Word形式だけでなく、リッチテキスト形式で出力し、Windows標準のワードパットアプリで編集することも可能です。

注意

 本記事執筆時点ではC1Wordはベータ版です。

C1Pdf(PDF for WPF)

 同じくグレープシティ社の提供する、Adobe PDFドキュメントを作成できるコンポーネントです。C1Word同様にComponentOne Studio for WPFを導入することで利用可能になります。

 テキストや画像の表示、しおり機能や、ファイルの添付など、PDFの高度な機能も利用可能です。

C1PdfViewer(PdfViewer for WPF)

 同じくグレープシティ社の提供する、Adobe PDFドキュメントを表示できるコンポーネントです。C1Word同様にComponentOne Studio for WPFを導入することで利用可能になります。

対象読者

 Visual Studioを利用してアプリケーションを作成した経験がある、またはC#、VisualBasicなどの.NET系言語での開発経験がある方。

必要な環境

 ComponentOne Studio for WPFを利用するには以下の環境が必要となります。詳しくは、公式サイトのページを参照ください。

  • Visual Studio 2010/2012/2013/2015 日本語版
  • .NET Framework 4.5.2/4.6/4.6.1/4.6.2

 本記事はVisual Studio 2015(Communityエディション)、.NET Framework 4.6環境で画像キャプチャーの取得、動作検証を行っております。

 Microsoft WordなどのOffice製品や、PDF作成ソフト(Adobe Acrobatなど)が無くても開発可能です(作成したPDFを閲覧する場合にビューワーが必要になりますが、アプリケーションの開発に必要ではありません)。

ComponentOne Studio for WPFのインストール

 ComponentOne Studio for WPFの導入については過去の記事「モダンな環境に対応する便利で多様なコンポーネント ~ バーコード/Excel/PDF/高解像度対応/タッチ操作/タイル」を参照ください。前述の記事ではWinFormsを選択してインストールしていますが、本記事ではWPFに読み替えてください。

 ComponentOne Studio for WPFのバージョンは執筆時点で最新の「2016J v2」を利用します。

Word形式でファイルを保存する

 C1Wordを用いて、Word形式(.docx)とリッチテキスト形式(.rtf)のファイルを出力する方法を紹介します。

Word形式での保存方法

 まずは、テキストを一行書き込んで保存する方法を紹介します。

参照の追加

 ソリューションエクスプローラーの「参照」を右クリック→「参照の追加」をクリックします。

参照の追加
参照の追加

 左ナビの「アセンブリ」→「拡張」から「C1.WPF.Word JPN」にチェックを入れ、右下の「OK」をクリックします。

C1.WPF.Word JPNの追加
C1.WPF.Word JPNの追加

 「C1.WPF.Word JPN」が表示されていない場合はComponentOne Studio for WPFのバージョンが古い可能性があります。

 サイトからComponentOne Studioの最新版をダウンロードするかC1LiveツールでComponentOne Studio for WPFを最新にしてください。C1Liveツールはデフォルトインストールでは、以下の場所にあります。

C:\Program Files (x86)\ComponentOne\C1Live\C1LiveUI.2.exe

usingの追加

 MainWindow.xaml.csに以下のusingを追加します。

usingの追加
using C1.WPF.Word;

処理の記述

 Wordのファイルをドキュメントフォルダに保存するシンプルな処理を紹介します。

Wordファイルの保存処理
// ドキュメントクラスを作成
C1WordDocument word = new C1WordDocument();
word.Clear();

// ドキュメント情報を設定します
word.Info.Author = "CodeZine";
word.Info.Subject = "C1Wordサンプル";
word.Info.Title = "サンプル";

// テキストとフォントの設定
string text = "C1WordでWord形式のファイルを保存するサンプル";
Font font = new Font("Segoe UI Light", 20, RtfFontStyle.Bold);

// パラグラフを追加
word.AddParagraph(text, font, Colors.Blue, RtfHorizontalAlignment.Justify);

// 保存するファイルのパス
// ドキュメントフォルダーに保存する
string document_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

// ファイル名
string file_name = "sample.docx";

// 保存処理
word.Save(document_path + System.IO.Path.DirectorySeparatorChar + file_name);

 アプリケーションでは、上記に保存フォルダをダイアログでユーザーに選択させる処理などが必要になりますが、ここでは簡略化のため省略してあります。ダイアログでファイル保存先を選択させるサンプルは公式のクイックスタートを参照ください。

C1Wordの機能紹介

 C1Wordの基本的な機能を紹介します。

画像の表示

 Wordドキュメントに画像を含めることができます。

 以下は画像を表示する簡単なサンプルです。ドキュメントフォルダーにsample.pngというファイルがあることを前提としています。

画像を保存するサンプル
// ドキュメントフォルダーのパス
string document_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

// 書き込み可能なビットマップに画像をロードします
BitmapImage bitmap = new BitmapImage();
FileStream stream = File.OpenRead(document_path + System.IO.Path.DirectorySeparatorChar + "sample.png");

bitmap.BeginInit();

bitmap.StreamSource = stream;

bitmap.EndInit();
var wb = new WriteableBitmap(bitmap);

Rect rect = new Rect(30, 30, 120, 120);

// アスペクト比を維持して画像をページの中央に配置します
word.DrawImage(wb, rect);
画像を表示する
画像を表示する

グラフィックの描画

 円形、四角形、ベジェ曲線。折れ線グラフなどを描くこともできます。

 以下は円を描画するサンプルです。

円を描画するサンプル
Rect rect = new Rect(30, 180, 120, 120);

word.FillPie(Colors.Red, rect, 0, 360);
word.DrawImage(wb, rect);
円を描画
円を描画

 その他、C1Wordの機能は以下の公式ドキュメントを参照ください。

PDF形式でファイルを保存する

 C1Pdfを用いてPDFを保存する方法を解説します。

PDF形式での保存方法

 まずは、テキストを一行書き込んだデータをPDFとして保存します。

参照の追加

 ソリューションエクスプローラーの「参照」を右クリック→「参照の追加」をクリックします。

参照の追加
参照の追加

 左ナビの「アセンブリ」→「拡張」から「C1.WPF JPN 」と「C1.WPF.Pdf JPN」にチェックを入れ、右下の「OK」をクリックします。

C1.WPF.Pdf JPNの追加
C1.WPF.Pdf JPNの追加

usingの追加

 MainWindow.xaml.csに以下のusingを追加します。

usingの追加
using C1.WPF.Pdf;

処理の記述

 PDFのファイルをドキュメントフォルダに保存するシンプルな処理を紹介します。

PDFファイルを保存する
C1PdfDocument pdf = new C1PdfDocument();

Rect rect = new Rect(30, 30, 120, 120);

Font font = new Font("Segoe UI", 12);
pdf.DrawString("PDF Sample", font, Colors.Black, rect);

// ドキュメントフォルダーのパス
string document_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

// ファイル名
string file_name = "sample.pdf";

// 保存処理
pdf.Save(document_path + System.IO.Path.DirectorySeparatorChar + file_name);

C1Pdfの機能紹介

 C1Pdfの基本的な機能を紹介します。

画像、図形の描画

 PDFに画像や図形を描画することができます。

図形を描画する
// 図形を描く範囲を指定
Rect rect = new Rect(30, 180, 120, 120);

// 円を描く
pdf.FillPie(Colors.Red, rect, 0, 360);

添付ファイルの保存

 PDFにファイルを添付することができます。

ファイルを添付する
// 図形を描く範囲を指定
Rect rect = new Rect(30, 330, 40, 40);

// ドキュメントフォルダーのパス
string document_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

string file_path = document_path + System.IO.Path.DirectorySeparatorChar + "sample.png";

// ファイルを添付します
pdf.AddAttachment(file_path, rect);
ファイルを添付
ファイルを添付

しおりを追加

 PDFにしおりを追加することが可能です。

しおりを追加する
// ブックマークを追加する
pdf.AddBookmark(text, 0, 30);
しおりを追加
しおりを追加

 その他、C1Pdfの機能は以下の公式ドキュメントを参照ください。

PDF形式でファイルを表示する

 C1PdfViewer for WPFを用いてPDFをアプリケーションに表示する方法を紹介します。

PDF形式の表示方法

 PDFを表示する方法を解説します。

参照の追加

 ソリューションエクスプローラーの「参照」を右クリック→「参照の追加」をクリックします。

参照の追加
参照の追加

 左ナビの「アセンブリ」→「拡張」から「C1.WPF JPN 」と「C1.WPF.PdfViewer JPN」にチェックを入れ、右下の「OK」をクリックします。

C1.WPF.PDF PdfViewrの追加
C1.WPF.PDF PdfViewrの追加

画面へのC1PdfViewerの追加

 ツールボックスからMainWindows.xamlにC1PdfViewerを追加します。

画面へのC1PdfViewerの追加
画面へのC1PdfViewerの追加

 追加したC1PdfViewerには以下のようにNameプロパティを設定します。

画面へのPdfViewerの追加
<Grid>
    <c1:C1PdfViewer x:Name="PdfViewer" HorizontalAlignment="Left" Margin="6,29,0,0" VerticalAlignment="Top"/>
</Grid>

usingの追加

 MainWindow.xaml.csに以下のusingを追加します。

usingの追加
using C1.WPF.Pdf;

処理の記述

 MainWindow.xaml.csに処理を記述します。

 コードはドキュメントフォルダにsample.pdfというファイルがある前提で記述されています。

C1PdfViewerにPDFファイルを表示する
// ドキュメントフォルダーのパス
string document_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

// ファイル名
string file_name = "sample.pdf";

// PDFファイルのロード
this.PdfViewer.LoadDocument(document_path + System.IO.Path.DirectorySeparatorChar + file_name);

 実行すると以下のようにPDFを読み込んで表示できます。

PDFの読み込み
PDFの読み込み

C1Pdfで作成したPDFの表示方法

 C1PdfのC1PdfDocumentクラスを用いて作成したPDFを読み込むこともできます。

C1PdfDocumentのデータを表示する
// C1PdfDocumentを作成する
C1PdfDocument pdf = new C1PdfDocument();

Rect rect = new Rect(30, 30, 120, 120);

Font font = new Font("Segoe UI", 12);
String text = "PDF Sample";

// テキストをPDFに書き込む
pdf.DrawString(text, font, Colors.Black, rect);

//内容をStreamに保存
MemoryStream stream = new MemoryStream();
pdf.Save(stream);

// 忘れずにSteamをシークする
stream.Seek(0, SeekOrigin.Begin);

// ロードする
this.PdfViewer.LoadDocument(stream);

まとめ

 業務系アプリケーションにおいて、アプリケーションのデータをWordやPDFで出力できるという付加価値は新たな提案につながるでしょう。

 ComponentOne Studio for WPFを利用すれば、WordやPDFへの出力が少ない工数で実装できます。また、本記事では紹介しませんでしたが、ComponentOne Studio for WPFではExcelファイルを扱う機能も提供しています。次回は、ComponentOne Studio for WPFを用いてExcelファイルを取り扱う方法をご紹介します。

 これら、本記事で紹介した機能の概要だけでも記憶にとどめて置き、提案に活かしていただければ幸いです。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 西村 誠(ニシムラ マコト)

     Microsoft MVP Windows Platform Development。  Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。  ブログ:眠るシーラカンスと水底のプログラマー  著書:基礎から学ぶ Windows...

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5