Cloud FunctionsとDioDocsでExcelやPDFファイルを出力する(3)

前回前々回の記事ではCloud Functionsで「DioDocs(ディオドック)」を使用したC#(.NET Core 3.1)の関数アプリケーションを作成し、ExcelやPDFファイルを出力する方法について紹介しました。

今回はCloud FunctionsでDioDocsを利用する際に、日本語フォントを使用するTipsを紹介します。

セルに追加するテキストの日本語フォント(DioDocs for Excel)

セルに追加するテキストの日本語フォントを設定したい場合は、Fontプロパティを使用します。

Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Font.Name = "MS P明朝";
セルに追加するテキストの日本語フォント(DioDocs for Excel)

セルではなくシート全体のフォントを設定したい場合はこちらのナレッジベースを参考にしてください。

ワークシートをPDF出力する際の日本語フォント(DioDocs for Excel)

Cloud Functionsで .NET Core 3.1および .NET 6のランタイムが含まれる関数アプリケーションの実行環境OSは、「Ubuntu 18.04または22.04」になっています。こちらには日本語を表示可能なフォント「Droid Sans Fallback」が含まれてはいますが、その他の日本語フォントは含まれていません。そのため、デフォルトの状態でPDF出力を実行すると指定したフォントで表示されなかったり、文字化けが発生したり、文字列そのものが表示されない現象が発生します。

そこでDioDocs for Excelを使用してPDF出力を実行する場合は、あらかじめ使用する日本語フォントを追加しておく必要があります。本記事では「IPAexフォント」を使用します。

Cloud Functionsでは、関数アプリケーションのプロジェクト内のフォルダをそのまま参照することができます。プロジェクト内に任意のフォルダ(「diodocs-fonts」フォルダなど)を作成して使用するフォントファイルを格納します。

ワークシートをPDF出力する際の日本語フォント(DioDocs for Excel)

そのフォルダをWorkbook.FontsFolderPathプロパティで設定します。

public async Task HandleAsync(HttpContext context)
{
    HttpRequest request = context.Request;
    string name = request.Query["name"].ToString();

    string Message = string.IsNullOrEmpty(name)
        ? "こんにちは、世界!"
        : $"こんにちは、{name}!";

    Workbook.FontsFolderPath = "./diodocs-fonts";

    Workbook workbook = new Workbook();
    workbook.Worksheets[0].Range["A1"].Font.Name = "IPAexゴシック";
    workbook.Worksheets[0].Range["A1"].Value = Message;

    workbook.Worksheets[0].Range["A2"].Font.Name = "IPAex明朝";
    workbook.Worksheets[0].Range["A2"].Value = Message;

    byte[] output;

    using (var ms = new MemoryStream())
    {
        workbook.Save(ms, SaveFileFormat.Pdf);
        output = ms.ToArray();
    }

    context.Response.ContentType = "application/pdf";
    context.Response.Headers.Add("Content-Disposition", "attachment;filename=Result.pdf");
    await context.Response.Body.WriteAsync(output);
}

Visual Studioで開発する際の注意点

Visual StudioではFunction.csなどのソースファイルを保存する際の文字コードはデフォルトが「Shift-JIS」となっています。このままデプロイして実行するとMessageにコード上で追加した日本語文字列が文字化けしてしまいます。この文字化けを解消するためにVisual Studioでソースファイルを保存する際は「UTF-8」を設定して保存するようにしてください。

Visual Studioで開発する際の注意点 (1)
Visual Studioで開発する際の注意点 (2)

「IPAexフォント」を設定したセルに日本語の文字列を持つExcelワークブックをPDFファイルへ出力すると、日本語が文字化けしたりすることなく「IPAexフォント」が設定されて正しく文字列が表示されていることが確認できます。

PDF出力結果(DioDocs for Excel)

PDFドキュメントを保存する際の日本語フォント(DioDocs for PDF)

DioDocs for PDFで作成したPDFドキュメントで日本語フォントを利用する場合も、「ワークシートをPDF出力する際の日本語フォント(DioDocs for Excel)」と同じ手順で日本語フォントを追加します。

以下のコードのようにFont.FromFileメソッドで日本語フォントのファイルを設定して、「IPAexゴシック」を設定した日本語の文字列を持つPDFドキュメントを出力すると、日本語が文字化けしたりすることなく「IPAexゴシック」が設定されて正しく文字列が表示されていることが確認できます。

public async Task HandleAsync(HttpContext context)
{
    HttpRequest request = context.Request;
    string name = request.Query["name"].ToString();

    string Message = string.IsNullOrEmpty(name)
        ? "こんにちは、世界!"
        : $"こんにちは、{name}!";

    Font font1 = Font.FromFile(Path.Combine("diodocs-fonts", "ipaexg.ttf"));

    GcPdfDocument doc = new GcPdfDocument();
    GcPdfGraphics g = doc.NewPage().Graphics;

    g.DrawString(Message,
        new TextFormat() { Font = font1, FontSize = 12 },
        new PointF(72, 72));

    byte[] output;

    using (var ms = new MemoryStream())
    {
        doc.Save(ms, false);
        output = ms.ToArray();
    }

    context.Response.ContentType = "application/pdf";
    context.Response.Headers.Add("Content-Disposition", "attachment;filename=Result.pdf");
    await context.Response.Body.WriteAsync(output);
}
PDF出力結果(DioDocs for PDF)

なお、こちらもVisual Studioで開発する場合は、日本語の文字化けを回避するためにソースファイルの文字コードを「Shift-JIS」から「UTF-8」に変更しておく必要があります。


弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。

また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。

\  この記事をシェアする  /