Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

iTextSharpを利用して.NETでPDF帳票を出力する

iTextSharpで見栄えの良い印刷帳票を作成する

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

アプリケーション開発をしていると帳票を出力したいという要望が多く聞かれます。帳票を出力する方法は幾つかありますが、その中でもよく利用されているのがPDFによる印刷です。本稿では、iTextSharpというオープンソースのライブラリを利用して、.NETのアプリケーションからPDFファイルを生成する方法を紹介します。

目次

はじめに

 アプリケーション開発をしていると帳票を出力したいという要望が多く聞かれます。帳票を出力する方法は幾つかありますが、その中でもよく利用されているのがPDF形式による印刷です。PDFは、Adobe Readerによって表示/印刷できるフォーマットで、きれいに整形された印刷物を提供することができます。本稿では、iTextSharpというオープンソースのライブラリを利用して、.NETのアプリケーションからPDFを生成する方法を紹介します。

対象読者

 Visual Studio(.NET)にて開発を行っていて、PDF生成や帳票出力に興味がある方を対象としています。

必要な環境

 ダウンロードファイルはVisual Studio 2003にて作成しています。本稿では、C#で解説していますが、VisualBasicのソースもサンプルには含まれています。また、Visual C#(Visual Basic) 2005 Express Editionでも動かすことができます(最初にプロジェクトをアップグレードするウィザードが表示されます)。

 また、生成されたPDFを確認するために、Adobe Readerをインストールする必要があります。

iTextSharpとPDF

 本稿では、iTextSharpを利用してPDFを生成します。PDF(Portable Document Format)とは、さまざまなOSで閲覧できるため広く普及している文書用のフォーマット形式です。また、電子署名、暗号技術、アクセス制御などのセキュリティの考慮がされており、ファイル容量も小さいことからWebサイトや電子メール添付など幅広い用途で利用されています。

iTextSharpの特長

 iTextSharpは、iTextというJavaのライブラリをC#に移植したものです。

 .NETで動作するiTextには、iTextSharp以外にも、iText.NETという移植版が存在します。開発者が日本人(氏原さん)のため多国語処理に強く、日本語の情報が充実しているメリットがあります。

 これに対してiTextSharpは、Visual J# .NETの再頒布可能パッケージが不要なため、C#やVisual Basic .NETから手軽に使えるといったメリットがあります。

 頻繁にバージョンアップされているため両方とも将来的に期待できますが、本稿ではiTextSharpについて紹介します。

iTextSharpを入手するには

 iTextSharpは、SourceForgeにて開発されており、ダウンロードページから入手することができます。執筆時点の最新版は、3.1.2です。

 本稿のダウンロードサンプルには、iTextSharpが既に含まれていますので、あらためて入手する必要はありません。自分のソリューションで利用したい場合は、「itextsharp-3.1.2-dll.zip」と「iTextAsian-1.0.dll」をダウンロードし、解凍後、参照設定をすると良いでしょう。

ダウンロードファイル一覧

 iTextSharpのサイトにはダウンロードファイルが多数ありますので簡単に整理します。

iTextSharp関連のファイル(バージョンは執筆時点)
配布フォルダファイル名説明
itextsharpitextsharp-3.1.2-dll.zipiTextSharpのDLL
itextsharpitextsharp-3.1.2.zipiTextSharpのソースコード
extarsiTextAsian-1.0.dllCJK(Chinese/Japanese/Korean)フォントのDLL
extarsiTextAsian-1.0.zipCJK(Chinese/Japanese/Korean)フォントのソースコード
extarsiTextAsianCmaps-1.0.dlliTextAsianCmapsのDLL
extarsiTextAsianCmaps-1.0.zipiTextAsianCmapsのソースコード
extarsitext-hyph-xml-1.0.dll自動ハイフネーション用のDLL
extarsitext-hyph-xml-1.0.zip自動ハイフネーション用のソースコード
examplesiTextSharp.tutorial.01.zipC#によるチュートリアル
examplesiTextSharp.tutorial.VB.NET.01.zipVisual Basic.NETによるチュートリアル

 必要に応じてダウンロードしてください。

ダウンロードファイルの概要

 サンプルファイルは、Visual Studio .NET 2003(C#)によるWindowsアプリケーションです。ソリューションファイル(iTextSharpSample.sln)をダブルクリックして、アプリケーションを起動してください。アプリケーションは次のメインフォームから構成されています。

 これらのボタンをクリックすると、実行ファイルと同じ場所にPDFが生成されます。横にある[PDFを開く]ボタンをクリックすると、それぞれのPDFを開くことができます。本稿では、簡単なPDFの生成から解説し、徐々に高度なPDFの生成について解説していきます。

 なお、MSゴシック、MS Pゴシック、MS UI Gothic、MS P明朝というフォントを使用しているため、これらのフォントがPDFを生成するPCに存在しない場合はエラーとなりますのでご注意ください。

(1)最初の簡単なサンプル

 それでは、PDFを出力するプログラムを見てみましょう。

簡単なPDFを生成するコード
//ドキュメントを作成
Document doc = new Document();
//ファイルの出力先を設定
PdfWriter.GetInstance(doc, new FileStream("01_Hello.pdf", FileMode.Create));
//ドキュメントを開く
doc.Open();
//「Hello iTextSharp」をドキュメントに追加
doc.Add(new Paragraph("Hello iTextSharp"));
//ドキュメントを閉じる
doc.Close();

 この短いコードを実行すると次のPDFファイルが生成されます。

生成されるPDF
生成されるPDF

 画面の左上に「Hello iTextSharp」という文字が表示されていることが確認できます。

コードの説明

 コードの詳細を見ていきましょう。

iTextSharp関連クラスの名前空間

 iTextSharpのプログラムで使用するクラスは、次の名前空間に含まれています。

iTextSharp関連の主要クラス
名前空間クラス名説明
iTextSharp.textDocumentドキュメントそのものを表すクラス
iTextSharp.textParagraph文字列を設定するためのクラス
iTextSharp.text.pdfPdfWriterPDFの出力を担うクラス

 そのため、次のusing句を追加しておきます。なお、System.IO名前空間は、PDFのファイル出力時(FileStreamクラス)で使用します。

名前空間の設定
//iTextSharp関連の名前空間
using iTextSharp.text;
using iTextSharp.text.pdf;
//ファイルIO関連の名前空間
using System.IO;

Documentオブジェクトを生成

 まずDocumentクラスのインスタンスを作成します。Documentクラスは生成するPDFドキュメントそのものを表します。

Document doc = new Document();

ファイルの出力先を設定

 次に、PdfWriterクラスのGetInstanceメソッドを使ってファイルの出力先を設定します。PdfWriterクラスはPDFの出力を担うクラスで、ここでは「01_Hello.pdf」というファイルに出力します(本稿ではPDFに出力する例のみを紹介しますが、HTMLやRTFなど他の出力形式のWriterを選ぶことも可能です)。

PdfWriter.GetInstance(doc, new FileStream("01_Hello.pdf", FileMode.Create));

 GetInstanceメソッドは、第1引数にDocumentのインスタンスを、第2引数に任意のStream(ここではFileStream)を設定します。なお、GetInstanceメソッドという名前の通りにPdfWriterのインスタンスを取得することもできます。

ドキュメントを開く(文章の出力開始)

 続けて、DocumentOpenメソッドを呼び出します。文章の出力を開始するために、まずOpenメソッドを呼び出す必要があります。

doc.Open();

ドキュメントにコンテンツを追加

 そして、表示したい文字や図といったコンテンツを追加します。ここでは、「Hello iTextSharp」という文字列を追加するためにDocumentAddメソッドを呼び出しています。

doc.Add(new Paragraph("Hello iTextSharp"));

 Addメソッドの引数に、Paragraphというクラスを指定しています。Paragraphクラスは、パラグラフという名前の通りに「段落」を表すクラスで、表示したい文字や書式を設定することができます(詳細は後述しますが、Paragraph以外に、PhraseChunkというクラスを利用することもできます)。

ドキュメントを閉じる(文章の出力完了)

 最後に、DocumentCloseメソッドを呼び出します。このメソッドを呼び出すことによって、FileStreamがFlushされPDFファイルへの出力が完了します。

doc.Close();

主要クラスの整理

 DocumentクラスとPdfWriterクラスのメソッドをクラス図で整理します。iTextSharpを使いこなすには、主要クラスであるDocumentクラスの役割をしっかりと理解しておくと良いでしょう。

クラスの整理
クラスの整理

 なお、これ以降のコードについては、必要な箇所を中心に説明しますので、全体のソースを見たい方はダウンロードサンプルを見るようにしてください。


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

著者プロフィール

  • WINGSプロジェクト 青木 淳夫 (株式会社ネクストスケープ)(アオキ アツオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

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