PDFファイルを出力するライブラリにiTextSharpがあります。
JAVAライブラリだったiTextを.net用に移植されたものです。(ありがたい!)
iTextSharpを使って、日本語でPDFファイルを出力します。
iTextSharpの準備
まずは、VisualStudioの設定ですが、手軽にnuGetでいきます。
iTextSharpで検索すればすぐ見つかりますので、インストール。
あとは、同意→閉じる で準備完了。
コーディング
まず、以下のサンプルを試す場合は、
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;
を入れておいてください。
テキストを描画する方法はたくさんあるのですが、一番シンプルな方法は次のようにします。ただし、この方法では描画する位置は自由に指定できませんし、日本語を出力できません。(多分)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//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)とはなんぞ。という感じですが。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
//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を取得して指定しています。フォントはファイル名ではなくフォント名を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
//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(); |