PDFファイルを出力するライブラリにiTextSharpがあります。
JAVAライブラリだったiTextを.net用に移植されたものです。(ありがたい!)
iTextSharpを使って、日本語でPDFファイルを出力します。
まずは、VisualStudioの設定ですが、手軽にnuGetでいきます。
iTextSharpで検索すればすぐ見つかりますので、インストール。
あとは、同意→閉じる で準備完了。
まず、以下のサンプルを試す場合は、
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();
今度は、任意の場所にテキストを配置する場合。
上と違って、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();
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();
[Collab] Collab…