Categories: C#

C# iTextSharpで日本語のPDFファイルを出力

PDFファイルを出力するライブラリにiTextSharpがあります。
JAVAライブラリだったiTextを.net用に移植されたものです。(ありがたい!)

iTextSharpを使って、日本語でPDFファイルを出力します。

iTextSharpの準備

まずは、VisualStudioの設定ですが、手軽にnuGetでいきます。

iTextSharpで検索すればすぐ見つかりますので、インストール。

OKをクリック。

あとは、同意→閉じる で準備完了。

コーディング

まず、以下のサンプルを試す場合は、
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;
を入れておいてください。

テキストを描画する方法はたくさんあるのですが、一番シンプルな方法は次のようにします。ただし、この方法では描画する位置は自由に指定できませんし、日本語を出力できません。(多分)

            //A4サイズを横向きで
            Document pdfDocument = new Document(PageSize.A4.Rotate(), 0, 0, 0, 0);

            //出力先のファイル名
            string makePdfFilePath = @"c:\PDF\test.pdf";
            FileStream fileStream = new FileStream(makePdfFilePath, FileMode.Create);
            PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, fileStream);

            //PDFドキュメントを開く
            pdfDocument.Open();

            pdfDocument.Add(new Paragraph("test"));
            
            //PDFドキュメントを閉じる
            pdfDocument.Close();

 

ShowTextでテキスト描画

今度は、任意の場所にテキストを配置する場合。
上と違って、PdfContentByte オブジェクトを先に用意して、MoveText(50, 50) で描画位置を指定しています。ちなみに、左下が(0,0)です。
pdfDocument.Add()で描画すると、左上から始まるくせに、左下が(0,0)とはなんぞ。という感じですが。

//A4サイズを横向きで
Document pdfDocument = new Document(PageSize.A4.Rotate(), 0, 0, 0, 0);

//出力先のファイル名
string makePdfFilePath = @"c:\PDF\test.pdf";
FileStream fileStream = new FileStream(makePdfFilePath, FileMode.Create);
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, fileStream);

//PDFドキュメントを開く
pdfDocument.Open();

string fontFolder = Environment.SystemDirectory.Replace("system32", "fonts");

//フォント名
string fontName = fontFolder + "\\msgothic.ttc,0";

//フォントカラー
BaseColor baseColor = BaseColor.BLACK;

//フォントサイズ
float fontSize = 30.0f;

PdfContentByte pdfContentByte = pdfWriter.DirectContent;

//フォントの準備
BaseFont baseFont = BaseFont.CreateFont(fontName, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

//テキスト描画開始
pdfContentByte.BeginText();

//フォントとフォントサイズの指定
pdfContentByte.SetFontAndSize(baseFont, fontSize);

//描画位置の指定
pdfContentByte.MoveText(50, 50);

//描画するテキスト
pdfContentByte.ShowText(new PdfTextArray("あいうえお"));
pdfContentByte.ShowText(new PdfTextArray("かきくけこ"));

//テキスト描画終了
pdfContentByte.EndText();

//PDFドキュメントを閉じる
pdfDocument.Close();

SimpleColumnを使って、任意の枠内にテキスト描画

ColumnTextのSetSimpleColumnメソッドを使えば、指定した枠内にテキストを描画できます。
フォントの指定方法を上の例ではFontBaseを使っていますが、以下ではFontFactoryでpdf.Fontを取得して指定しています。フォントはファイル名ではなくフォント名を指定します。

//A4サイズを横向きで
Document pdfDocument = new Document(PageSize.A4.Rotate(), 0, 0, 0, 0);

//出力先のファイル名
string makePdfFilePath = @"c:\PDF\test.pdf";
FileStream fileStream = new FileStream(makePdfFilePath, FileMode.Create);
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, fileStream);

//PDFドキュメントを開く
pdfDocument.Open();

//フォント名
string fontName = "MS ゴシック";

//フォントサイズ
float fontSize = 10.0f;

//フォントスタイル。 複合するときは、&で。
int fontStyle = iTextSharp.text.Font.BOLD;// &iTextSharp.text.Font.ITALIC;

//フォントカラー
BaseColor baseColor = BaseColor.BLACK;

//Fontフォルダを指定
FontFactory.RegisterDirectory(Environment.SystemDirectory.Replace("system32", "fonts"));

//フォントの設定
iTextSharp.text.Font font =
    FontFactory.GetFont(fontName,
    BaseFont.IDENTITY_H,            //横書き
    BaseFont.NOT_EMBEDDED,          //フォントを組み込まない
    fontSize,
    fontStyle,
    baseColor);

PdfContentByte pdfContentByte = pdfWriter.DirectContent;

ColumnText columnText = new ColumnText(pdfContentByte);

//SetSimpleColumnで出力
columnText.SetSimpleColumn(
    new Phrase("あいうえおかきくけこ", font)
    , 50    // X1位置
    , 50    // Y1位置
    , 100   // X2位置
    , 70    // Y2位置
    , fontSize
    , Element.ALIGN_LEFT    //ちなみに、SetSimpleColumnでは、ALIGN_MIDDLE(縦方向の中寄せ)は使えない
    );

//テキスト描画
columnText.Go();

//PDFドキュメントを閉じる
pdfDocument.Close();

 

nakaike