はじめに
アプリケーション開発をしていると帳票を出力したいという要望が多く聞かれます。帳票を出力する方法は幾つかありますが、その中でもよく利用されているのが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 | itextsharp-3.1.2-dll.zip | iTextSharpのDLL |
itextsharp | itextsharp-3.1.2.zip | iTextSharpのソースコード |
extars | iTextAsian-1.0.dll | CJK(Chinese/Japanese/Korean)フォントのDLL |
extars | iTextAsian-1.0.zip | CJK(Chinese/Japanese/Korean)フォントのソースコード |
extars | iTextAsianCmaps-1.0.dll | iTextAsianCmapsのDLL |
extars | iTextAsianCmaps-1.0.zip | iTextAsianCmapsのソースコード |
extars | itext-hyph-xml-1.0.dll | 自動ハイフネーション用のDLL |
extars | itext-hyph-xml-1.0.zip | 自動ハイフネーション用のソースコード |
examples | iTextSharp.tutorial.01.zip | C#によるチュートリアル |
examples | iTextSharp.tutorial.VB.NET.01.zip | Visual 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を出力するプログラムを見てみましょう。
//ドキュメントを作成 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ファイルが生成されます。
画面の左上に「Hello iTextSharp」という文字が表示されていることが確認できます。
コードの説明
コードの詳細を見ていきましょう。
iTextSharp関連クラスの名前空間
iTextSharpのプログラムで使用するクラスは、次の名前空間に含まれています。
名前空間 | クラス名 | 説明 |
iTextSharp.text | Document | ドキュメントそのものを表すクラス |
iTextSharp.text | Paragraph | 文字列を設定するためのクラス |
iTextSharp.text.pdf | PdfWriter | PDFの出力を担うクラス |
そのため、次の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
のインスタンスを取得することもできます。
ドキュメントを開く(文章の出力開始)
続けて、Document
のOpen
メソッドを呼び出します。文章の出力を開始するために、まずOpen
メソッドを呼び出す必要があります。
doc.Open();
ドキュメントにコンテンツを追加
そして、表示したい文字や図といったコンテンツを追加します。ここでは、「Hello iTextSharp」という文字列を追加するためにDocument
のAdd
メソッドを呼び出しています。
doc.Add(new Paragraph("Hello iTextSharp"));
Add
メソッドの引数に、Paragraph
というクラスを指定しています。Paragraph
クラスは、パラグラフという名前の通りに「段落」を表すクラスで、表示したい文字や書式を設定することができます(詳細は後述しますが、Paragraph
以外に、Phrase
やChunk
というクラスを利用することもできます)。
ドキュメントを閉じる(文章の出力完了)
最後に、Document
のClose
メソッドを呼び出します。このメソッドを呼び出すことによって、FileStreamがFlushされPDFファイルへの出力が完了します。
doc.Close();
主要クラスの整理
Document
クラスとPdfWriter
クラスのメソッドをクラス図で整理します。iTextSharpを使いこなすには、主要クラスであるDocument
クラスの役割をしっかりと理解しておくと良いでしょう。
なお、これ以降のコードについては、必要な箇所を中心に説明しますので、全体のソースを見たい方はダウンロードサンプルを見るようにしてください。