今回はiTextSharpで日本語を出力する方法を紹介します。
iTextSharpで日本語を出力する方法は2通りあります。
1つ目は、ローカルPCにインストールされている日本語のフォントファイルから
Fontオブジェクトを生成する方法です。
Fontオブジェクトの生成には、BaseFontクラスのCreateFontメソッドを使用します。
第一引数で、使用するフォントのフォントファイルを指定しています。ttcファイルは
複数のフォントが含まれるファイルですので、ファイル名の後に、[0]をインデックスと
して、指定しています。
上記サンプルでは「MS ゴシック 標準」フォントを指定しています。
第二引数は、文字エンコーディングを指定します。
日本語の場合は向きに応じて、「IDENTITY_H(横書き)」、「IDENTITY_V(縦書き)」の
いずれかを指定します。
第三引数には、フォントをPDFファイルに埋め込むかどうかを指定しています。
生成したフォントは「Paragraph」や「Chunk」に指定して、使用します。
2つ目の方法は、標準で使用可能なビルトインフォントを使用する方法です。
「ビルトインフォント」を使用する場合は、「iTextAsian.dll」ファイルを
参照に追加しておく必要があります。「iTextAsian.dll」は以下のURLからダウンロード可能です。
http://sourceforge.net/projects/itextsharp/files/extras/extras%201.0/
※DLLバージョンを使用すると、「フォントを認識できない」というエラーが発生する場合がありますので、
ソース(iTextAsian-1.0.zip)をダウンロードして、ビルドしたものを使用した方が良いです。
「ビルドインフォント」を使用するためには、以下のようにして、BaseFontのリソースに
登録しておく必要があります。
staticメンバーのメソッドなので、プログラム実行中に付き、一度実行すればOKです。
ビルドインフォントのFontオブジェクトは以下のようにして生成します。
こちらも同じく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」
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#のコードを書くことが出来ます。
出てきます。有料のライブラリは多数販売されているのですが、お金を使わずにやりたいと
オープンソースのライブラリを探してみました。
.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); } } } }