SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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


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

アプリケーション開発をしていると帳票を出力したいという要望が多く聞かれます。帳票を出力する方法は幾つかありますが、その中でもよく利用されているのが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クラスの役割をしっかりと理解しておくと良いでしょう。

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

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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
(2)日本語フォントの利用

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/462 2006/10/11 19:39

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング