最近のでまとまった記事がなかったので。

プロジェクトはVisual Studio 2017で作成、
iTextSharpはNuGetでインストール済みとします。

  1. こちら(http://ukezara.net/hueho2013/?p=109)を参考に、iTextAsian-src-2.1.zipを解凍して出てくるiTextAsian.csprojをVisual Studio 2013で読み込み(自動でプロジェクト変換してくれます)、そのままビルド。(2013じゃなくてもいけるかもしれません)
  2. 1でビルドしてできたiTextAsian.dllをプロジェクトの参照に追加。
  3. Global.asax.csのApplication_Start()の最後に、
    iTextSharp.text.io.StreamUtil.AddToResourceSearch(Server.MapPath("bin\\iTextAsian.dll"));
    を追加。

これで準備OK。

実際にPDFを作る時は、以下のようにBaseFontを設定してやります。
BaseFont myBaseFont = BaseFont.CreateFont("KozMinPro-Regular", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED);

これで日本語PDFファイルが作成できます。

日本語フォントについてはこちらも参考になります。
http://csfun.blog49.fc2.com/blog-entry-98.html

ちなみにPDFの様式が決まっているなら、AcrobatでPDFにフォームの設定をしてやってテンプレートとして使うと、フォントのサイズとか表示位置とか、フォームで調整できるので超楽です。

以下は、Shuttle Sticker シールの注文管理画面で納品書兼領収書のPDFファイルを出力するソースコード。参考まで。

public async Task<ActionResult> Doc(int? id)
        {

            // 注文情報を取得
            Order order = await db.Orders.FindAsync(id);

            string pdfTemplate = @"d:\home\site\pdf\doc.pdf";
            string basePath = @"d:\home\site\pdf\" + order.OrderNo + @"\";
            string newFile = basePath + order.OrderNo + "doc.pdf";

            PdfReader pdfReader = new PdfReader(pdfTemplate);
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create));

            // 日本語フォントの設定
            BaseFont myBaseFont = BaseFont.CreateFont("KozMinPro-Regular", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED);
            pdfStamper.AcroFields.AddSubstitutionFont(myBaseFont);

            AcroFields pdfFormFields = pdfStamper.AcroFields;

            // ¥マーク 005Cではなく00A5
            string charCode = "00A5";
            int charCode16 = Convert.ToInt32(charCode, 16);
            char c = Convert.ToChar(charCode16);
            string newChar = c.ToString();

            // フォームに値をセット
            pdfFormFields.SetField("納品書-氏名", order.Name);
            pdfFormFields.SetField("納品書-金額", newChar + order.OrderTotalFee.ToString("#,0"));
            // 略

            pdfStamper.FormFlattening = true;

            pdfStamper.Close();
            pdfReader.Close();

            return File(newFile, "applicatioin/pdf", order.OrderNo + "doc.pdf");

        }

Tagged on:                 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>