3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)iTextSharpを使ってPDFを出力する

iTextSharpというライブラリを使うと簡単にできるようです。

ダウンロードはhttp://sourceforge.net/projects/itextsharp/files/itextsharp/からできます。

なかなかクラスライブラリの詳しい説明をしてくれているサイトがないんですが、Vector:iTextSharp クラスライブラリリファレンスにて、ライブラリのリファレンスをヘルプ形式で提供してくれてます。

このリファレンスのおかげでほんと助かりました。

使い方の概要的なものは、CodeZine:iTextSharpを利用して.NETでPDF帳票を出力するがわかりやすいです。(途中までしか見えませんが。。。)

今回はテキストだけなので、かなり簡単にできました。

基本的には、Document インスタンスを生成し、PdfWriter.GetInstance で出力先を指定し、Document.Open → Document.Add で文字列追加 → Document.Close という流れです。

ハマったのは Font の指定でした。

上記CodeZineに載っているように、直接フォントファイルへのパスを指定して、HG丸ゴシックを使いたかったんですが、下記のよう書いたらダメでした。

string systemRoot = Environment.GetEnvironmentVariable("SystemRoot");

Font fnt = new Font(BaseFont.CreateFont(systemRoot + @"\fonts\HGRSMP.TTF,0", BaseFont.IDENTITY_H, true), 24);

で、リファレンスを見てると、FontFactoryクラスを使うと簡単にできることが判明。

下記のような感じです。(C#)

Font fntNormal = FontFactory.GetFont("HG丸ゴシックM-PRO", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED, 16);

Font fntBlue = FontFactory.GetFont("HG丸ゴシックM-PRO", BaseFont.IDENTITY_H, 20, Font.NORMAL, iTextSharp.text.BaseColor.BLUE);

fntBlue.SetColor(255, 0, 0); //カラーを変更

全体としては下記のような感じです。(C#)

using iTextSharp.text.pdf;

using iTextSharp.text;

 

try

{

 

Document mDoc = new Document();

//font定義

FontFactory.RegisterDirectories();

Font fntNormal = FontFactory.GetFont("HG丸ゴシックM-PRO", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED, 22);

Font fntBlue = FontFactory.GetFont("HG丸ゴシックM-PRO", BaseFont.IDENTITY_H, 20, Font.NORMAL, iTextSharp.text.BaseColor.BLUE);

 

//保存先指定

PdfWriter.GetInstance(mDoc, new FileStream(@"c:\a.pdf", FileMode.Create));

 

//ドキュメント開く

mDoc.Open();

//データセット

mDoc.Add(new Paragraph("テストテスト", fntNormal));

mDoc.Add(new Paragraph("あいうえお", fntBlue));

fntBlue.SetColor(255, 0, 0);

mDoc.Add(new Paragraph("かっきくけこ", fntBlue));

mDoc.Add(new Paragraph(strInfoPasswd, fntNormal_middle));

mDoc.Add(new Paragraph(" " + user.Password, fntRed));

//ドキュメント閉じる

mDoc.Close();

 

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}