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

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

著者プロフィール

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

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

バックナンバー

連載:Infragistics NetAdvantageチュートリアル

もっと読む

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