CodeZine(コードジン)

特集ページ一覧

WindowsアプリケーションにXPS/PDF出力機能を追加する

Infragistics NetAdvantageチュートリアル その6 - XPS/PDF出力

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/05/08 17:00

Infragistics NetAdvantageファミリー製品は、Windows Forms、ASP.NET、そして、Windows Presentation Foundationに対応した、高度なユーザーインターフェースを提供するコンポーネント群で、使い慣れた画面操作をユーザーに提供するサポートをします。今回は、PDFやXPSといった電子文書を出力するための「Infragistics Document Export Engine」に注目して、その使い方を紹介します。

はじめに

 インフラジスティックス社の提供するInfragistics NetAdvantageファミリー製品は、マルチプラットフォームでWindows Forms、ASP.NET、そしてWindows Presentation Foundationに対応した商用アプリケーションユーザーインターフェイスの構築をサポートするプレゼンテーションレイヤコンポーネント群であり、その高度なユーザーインターフェイスコントロールは、使い慣れた画面操作をユーザーに提供するサポートをします。

 今回は、Windowsアプリケーション用として提供されているコンポーネントの中から、Infragistics Document Export Engine(図1)に注目して、その使い方を紹介したいと思います。

図1 - Infragistics.Documents
図1 - Infragistics.Documents

対象読者

  • Visual Basic 2005/2008、Visual C# 2005/2008で開発を行っている人
  • PDFやXPSでの出力に興味のある人

必要な環境・コンポーネントのインストール

 必要な環境・コンポーネントについては、過去の記事で紹介しているものと変わりません。追加として、先日リリースされたVisual Studio 2008でも利用可能です。コンポーネントについては、Infragistics社のWebサイトから最新のNetAdvantage for .NET 2007 Volume 2をダウンロードし、インストールしてください。また、動作を確認するためには、Adobe ReaderXPS 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を使って、名前空間の指定をしておきましょう。名前空間が長めのため、このような指定を行うことで、プログラムを見やすくします。

図2 - 参照設定
図2 - 参照設定
リスト1 - PDF作成(C#版)
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");
}
リスト2 - PDF 作成(Visual Basic 版)
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での描画処理とほぼ同じになっています。ただし、この際に利用できるオブジェクト(PenBrushColorなど)は、.NET Frameworkで用意されているものではなく、Document Export Engineで提供されているという点には注意してください。

 なお、一部のPDF作成コンポーネントでは、日本語の扱いに問題があるものも見かけます。Document Export Engineでは、フォントを指定するだけで簡単に日本語の出力も行えました。こういった点は、日本語でのビジネスアプリケーション作成にはうれしいところです。

 ひと通りの描画処理が終わったら、Report.Publish()メソッドを呼び出してPDFファイルを作成します。そして、作成が終わったらProcess.Start()メソッドでPDFを表示しています(図3)。このために、あらかじめAdobe Readerをインストールしておく必要があります。

図3 - 出力したPDF
図3 - 出力したPDF

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対応版に変更するには、次のようにプログラムコードを修正するだけです。

リスト3 - XPS出力用に修正(C#版) 【修正前】
report.Publish("sample.pdf", FileFormat.PDF);
Process.Start("sample.pdf");
リスト3 【修正後】
report.Publish("sample.xps", FileFormat.XPS);
Process.Start("sample.xps");
リスト4 - XPS出力用に修正(Visual Basic版)【修正前】
report.Publish("sample.pdf", FileFormat.PDF)
Process.Start("sample.pdf")
リスト4 【修正後】
(修正後)
report.Publish("sample.xps", FileFormat.XPS)
Process.Start("sample.xps")

 PDF出力用のコンポーネントは、PDFの構造をオブジェクトモデルで表現するものが多いのですが、Document Export Engineは高度に抽象化されているため、PDFでもXPSでも利用できるというわけです。出力したXPSは、(図4)のようになります。出力したファイルがPDFかXPSかの違いはあるものの、同じ内容が出力されていることが分かります。

図4 - 出力したXPS
図4 - 出力したXPS

おわりに

 今回は、インフラジスティックス社のコンポーネントの中から、Infragistics Document Export Engineの使い方について見てきました。入力した情報を加工して処理する、これこそ情報処理なわけですが、「レポートの出力」というのは、ある意味でその最後に位置する重要な処理となります。

 特に日本のビジネスシーンでは、「帳票」が特に重要視されるため、多くの開発者の頭を悩ましてきました。Document Export Engineは、直接的に「帳票を出力する機能」を持つものではありませんが、PDFやXPSといった形で出力することができます。出力したPDFをそのまま印刷する、といったことも可能なので、まさに、帳票の代わりとして利用することもできるでしょう。

 また、今回は紹介できませんでしたが、UltraWinGridと組み合わせて、グリッドの内容をそのまま、あるいは、ヘッダなどの表示方法を加工して出力することも可能です。このようなレポート出力機能は、見た目上派手なものではありませんが、アプリケーションに欠かすことができません。レポートや帳票の出力でお困りの開発者の皆さん、Document Export EngineによるPDF/XPS出力を検討してみてはいかがでしょうか。

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

著者プロフィール

  • こだかかおる(コダカカオル)

    Microsoft Most Valuable Professional Visual Developer - Visual C# .NETによるアプリケーション開発を中心に、IT全般について何でもやるソフトウェアエンジニア。更新をさぼりがちなWebサイトはこちら(http://www.antoin...

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5