気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

今回はiTextSharpで日本語を出力する方法を紹介します。

iTextSharpで日本語を出力する方法は2通りあります。
1つ目は、ローカルPCにインストールされている日本語のフォントファイルから
Fontオブジェクトを生成する方法です。

   Font font = new Font(
                 BaseFont.CreateFont(@"c:\windows\fonts\msgothic.ttc,0",
                          BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED)
                 , 20);

Fontオブジェクトの生成には、BaseFontクラスのCreateFontメソッドを使用します。
第一引数で、使用するフォントのフォントファイルを指定しています。ttcファイルは
複数のフォントが含まれるファイルですので、ファイル名の後に、[0]をインデックスと
して、指定しています。
上記サンプルでは「MS ゴシック 標準」フォントを指定しています。

第二引数は、文字エンコーディングを指定します。
日本語の場合は向きに応じて、「IDENTITY_H(横書き)」、「IDENTITY_V(縦書き)」の
いずれかを指定します。

第三引数には、フォントをPDFファイルに埋め込むかどうかを指定しています。

生成したフォントは「Paragraph」や「Chunk」に指定して、使用します。

   document.Add(new Paragraph("日本語出力のサンプルです。", font));

2つ目の方法は、標準で使用可能なビルトインフォントを使用する方法です。
「ビルトインフォント」を使用する場合は、「iTextAsian.dll」ファイルを
参照に追加しておく必要があります。「iTextAsian.dll」は以下のURLからダウンロード可能です。

http://sourceforge.net/projects/itextsharp/files/extras/extras%201.0/

※DLLバージョンを使用すると、「フォントを認識できない」というエラーが発生する場合がありますので、
ソース(iTextAsian-1.0.zip)をダウンロードして、ビルドしたものを使用した方が良いです。

「ビルドインフォント」を使用するためには、以下のようにして、BaseFontのリソースに
登録しておく必要があります。

   BaseFont.AddToResourceSearch("iTextAsian.dll");

staticメンバーのメソッドなので、プログラム実行中に付き、一度実行すればOKです。

ビルドインフォントのFontオブジェクトは以下のようにして生成します。

   Font font = new Font(
                BaseFont.CreateFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED)
                , 20);

こちらも同じくBaseFontクラスのCreateFontメソッドを使用します。
第一引数には使用するフォントを使用します。「iTextAsian.dll」には
以下の3つの日本語フォントが含まれています。
「HeiseiMin-W3」、「HeiseiKakuGo-W5」、「KozMinPro-Regular」

※標準フォントとして、インストールされているフォントはAcrobatの
バージョン毎に異なりますので、Readerで開いた際に、ここで指定された
フォントが存在しない場合は、Readerの判断で、それに応じたフォントが
使用されるようです。

第ニ引数には同じくエンコーディングを指定します。

日本語の場合は、次のいずれかを指定します。
「UniJIS-UCS2-H」、「UniJIS-UCS2-V」、「UniJIS-UCS2-HW-H」「UniJIS-UCS2-HW-V」

いろいろなアプリケーションを開発していると、PDF形式で帳票を出力したいケースが
出てきます。有料のライブラリは多数販売されているのですが、お金を使わずにやりたいと
オープンソースのライブラリを探してみました。

.NET Frameworkから使用できる外国製のオープンソースのライブラリはいつくか有るのですが、
日本語が扱えるとなると、これからご紹介する「iTextSharp」しかなさそうです。
「iTextSharp」はJavaの帳票ライブラリ「iText」の.NET版です。

・iTextSharpをダウンロードする

このライブラリには多様な機能が提供されているので、今後、継続して記事を書いていきたいと思います。
初回の今日はまず、文字列をPDFファイルに出力するだけの簡単なサンプルを紹介します。

iTextのサイトにJava版のサンプルコードが公開されているので
それを参考にC#のコードを書くことが出来ます。

using System;
using System.IO;

using iTextSharp.text;
using iTextSharp.text.pdf;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //作成する文書を表すクラス
                Document document = new Document();

                //PDFをファイルに出力するように設定する
                PdfWriter.GetInstance(document, new FileStream("helloWorld.pdf",FileMode.Create));

                //文書をオープンする。コンテンツを追加する前に必ず実施する必要があります。
                document.Open();

                //段落を追加する
                document.Add(new Paragraph("Hello! World."));

                //文書をクローズする。ここで出力用ストリームがFlushされ、閉じられます。
                document.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
            }
        }
    }
}