はじめに
インフラジスティックス社の提供するInfragistics NetAdvantageファミリー製品は、マルチプラットフォームでWindows Forms、ASP.NET、そしてWindows Presentation Foundationに対応した商用アプリケーションユーザーインターフェイスの構築をサポートするプレゼンテーションレイヤコンポーネント群であり、その高度なユーザーインターフェイスコントロールは、使い慣れた画面操作をユーザーに提供するサポートをします。
今回は、Windowsアプリケーション用として提供されているコンポーネントの中から、Infragistics Document Export Engine(図1)に注目して、その使い方を紹介したいと思います。
対象読者
- Visual Basic 2005/2008、Visual C# 2005/2008で開発を行っている人
- PDFやXPSでの出力に興味のある人
必要な環境・コンポーネントのインストール
必要な環境・コンポーネントについては、過去の記事で紹介しているものと変わりません。追加として、先日リリースされたVisual Studio 2008でも利用可能です。コンポーネントについては、Infragistics社のWebサイトから最新のNetAdvantage for .NET 2007 Volume 2をダウンロードし、インストールしてください。また、動作を確認するためには、Adobe ReaderとXPS Viewerが必要になります。
Infragistics Document Export EngineによるPDFによる出力
ビジネスアプリケーションでは、「レポート出力」という処理をもって、ひと通りのアプリケーションの流れが終わることが多いのではないでしょうか。そのレポートとして、最近は紙に出力するのではなく、PDF(Adobe Portable Document Format)などの電子文書として出力するケースも増えてきました。
PDFは、Adobeが作成したファイルフォーマットで、Adobe Readerを利用して表示することができます。Windowsに限らず多くの環境で利用できますし、内容を検索したり、印刷をできない用に制限したりと、いろいろと便利な機能を備えているため、多くの環境で利用されています。そんなPDFですが、.NETアプリケーションから出力しようとすると、今のところコンポーネントを利用するしか方法がありません。
NetAdvantageに含まれているDocument Export Engineを利用すると、PDFを.NETアプリケーションから作成することができます。その利用方法はオブジェクトモデルに基づいたものであり、.NETアプリケーション開発者にとってはスムーズに扱えることでしょう。説明はこの辺にして、そろそろDocument Export Engineを利用したPDF作成について見ていきましょう。
Visual Studioでプロジェクトを開始し、準備として「Infragistics2.Documents.v7.2」を参照設定で追加します(図2)。後は、using、Importsを使って、名前空間の指定をしておきましょう。名前空間が長めのため、このような指定を行うことで、プログラムを見やすくします。
using System.Diagnostics; using Infragistics.Documents.Graphics; using Infragistics.Documents.Report; using Infragistics.Documents.Report.Section; (略) private void btnCreatePDF_Click(object sender, EventArgs e) { Report report; ISection section; ICanvas canvas; report = new Report(); report.Info.Title = "レポートサンプル"; section = report.AddSection(); section.PageSize = PageSizes.A4; section.PageMargins.All = 35; canvas = section.AddCanvas(); canvas.Borders = new Borders(Pens.Black, 5); canvas.Paddings.All = 5; canvas.Pen = new Pen(Colors.Red, 5); canvas.Brush = new SolidColorBrush(new Color(255, 240, 240)); canvas.DrawRectangle( 50, 50, 180, 100, PaintMode.FillStroke); canvas.Font = new Font("メイリオ", 18); canvas.Brush = Brushes.Black; canvas.DrawString(70, 90, "日本語の文字です"); canvas.Pen = new Pen(Colors.Green, 5); canvas.DrawLine(250, 50, 320, 150); canvas.Pen = new Pen(Colors.Blue, 5); canvas.Brush = new SolidColorBrush(new Color(240, 240, 255)); canvas.DrawEllipse( 340, 50, 150, 100, PaintMode.FillStroke); report.Publish("sample.pdf", FileFormat.PDF); Process.Start("sample.pdf"); }
Imports System.Diagnostics Imports Infragistics.Documents.Graphics Imports Infragistics.Documents.Report Imports Infragistics.Documents.Report.Section (略) Private Sub btnCreatePDF_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles btnCreatePDF.Click Dim report As Report Dim section As ISection Dim canvas As ICanvas report = New Report() report.Info.Title = "レポートサンプル" section = report.AddSection() section.PageSize = PageSizes.A4 section.PageMargins.All = 35 canvas = section.AddCanvas() canvas.Borders = New Borders(Pens.Black, 5) canvas.Paddings.All = 5 canvas.Pen = New Pen(Colors.Red, 5) canvas.Brush = _ New SolidColorBrush(New Color(255, 240, 240)) canvas.DrawRectangle( _ 50, 50, 180, 100, PaintMode.FillStroke) canvas.Font = New Font("メイリオ", 18) canvas.Brush = Brushes.Black canvas.DrawString(70, 90, "日本語の文字です") canvas.Pen = New Pen(Colors.Green, 5) canvas.DrawLine(250, 50, 320, 150) canvas.Pen = New Pen(Colors.Blue, 5) canvas.Brush = _ New SolidColorBrush(New Color(240, 240, 255)) canvas.DrawEllipse( _ 340, 50, 150, 100, PaintMode.FillStroke) report.Publish("sample.pdf", FileFormat.PDF) Process.Start("sample.pdf") End Sub
プログラム自体は、それほど難しいものではありません。Report
オブジェクトを生成し、Section
オブジェクトを追加します。Section
オブジェクトでは、ページサイズなどを指定することができます。今回は、一般的なA4サイズを指定しました。続いて、Canvas
オブジェクトをSection
に追加します。実際の出力処理は、このCanvas
オブジェクトに対して行っていくことになります。
Canvas
オブジェクトへの出力は、テキストを描画するDrawString()
メソッドや四角形を描画するDrawRectangle()
メソッドなど、.NET Frameworkでの描画処理とほぼ同じになっています。ただし、この際に利用できるオブジェクト(Pen
やBrush
、Color
など)は、.NET Frameworkで用意されているものではなく、Document Export Engineで提供されているという点には注意してください。
なお、一部のPDF作成コンポーネントでは、日本語の扱いに問題があるものも見かけます。Document Export Engineでは、フォントを指定するだけで簡単に日本語の出力も行えました。こういった点は、日本語でのビジネスアプリケーション作成にはうれしいところです。
ひと通りの描画処理が終わったら、Report.Publish()
メソッドを呼び出してPDFファイルを作成します。そして、作成が終わったらProcess.Start()
メソッドでPDFを表示しています(図3)。このために、あらかじめAdobe Readerをインストールしておく必要があります。
Infragistics Document Export Engine DOMによるXPS出力
さて、前段でPDF作成方法について紹介しました。続いて、XPSの作成についても見ていきましょう。XPS(XML Paper Specification)は、ひとことで言ってしまえば、Microsoft版のPDFといったものです。まだあまり多くの環境で利用されているとはいいづらいものの、Microsoft Office 2007をインストールした環境や、Windows Vistaでは、特に追加でアプリケーションをインストールすることなく利用できます。
今後、PDFを超えるデファクトスタンダードへと成長していくのかどうかは分かりませんが、アプリケーションとしてXPSを出力するという要望は増えていくのではないでしょうか。XPSに対応したコンポーネントはまだほとんど見かけませんので、他者に一歩先んじるという意味でもなかなか興味深いと思います。
XPSを出力するに当たって、それ専用のコンポーネントがあるものと思っていました。――が、実はそんなことはなく、単にレポートをPublish()
するときの引数でフォーマットを指定するだけなのでした。ということで、先ほどのサンプルプログラムをXPS対応版に変更するには、次のようにプログラムコードを修正するだけです。
report.Publish("sample.pdf", FileFormat.PDF); Process.Start("sample.pdf");
report.Publish("sample.xps", FileFormat.XPS); Process.Start("sample.xps");
report.Publish("sample.pdf", FileFormat.PDF) Process.Start("sample.pdf")
(修正後) report.Publish("sample.xps", FileFormat.XPS) Process.Start("sample.xps")
PDF出力用のコンポーネントは、PDFの構造をオブジェクトモデルで表現するものが多いのですが、Document Export Engineは高度に抽象化されているため、PDFでもXPSでも利用できるというわけです。出力したXPSは、(図4)のようになります。出力したファイルがPDFかXPSかの違いはあるものの、同じ内容が出力されていることが分かります。
おわりに
今回は、インフラジスティックス社のコンポーネントの中から、Infragistics Document Export Engineの使い方について見てきました。入力した情報を加工して処理する、これこそ情報処理なわけですが、「レポートの出力」というのは、ある意味でその最後に位置する重要な処理となります。
特に日本のビジネスシーンでは、「帳票」が特に重要視されるため、多くの開発者の頭を悩ましてきました。Document Export Engineは、直接的に「帳票を出力する機能」を持つものではありませんが、PDFやXPSといった形で出力することができます。出力したPDFをそのまま印刷する、といったことも可能なので、まさに、帳票の代わりとして利用することもできるでしょう。
また、今回は紹介できませんでしたが、UltraWinGridと組み合わせて、グリッドの内容をそのまま、あるいは、ヘッダなどの表示方法を加工して出力することも可能です。このようなレポート出力機能は、見た目上派手なものではありませんが、アプリケーションに欠かすことができません。レポートや帳票の出力でお困りの開発者の皆さん、Document Export EngineによるPDF/XPS出力を検討してみてはいかがでしょうか。