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

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

今回はAzure 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)

DioDocs for ExcelではFontsFolderPathプロパティで参照するフォルダを設定していない場合、Azure Functionsアプリケーションの実行環境(Windows)のC:¥Windows¥Fontsにインストールされている日本語フォントであればFontプロパティで設定するだけです。

「PDFエクスポート時に使用されるフォントについて」を見る

例えば、Fontプロパティで「メイリオ」を設定してワークシートをPDF出力した場合、Azure Functionsの実行環境のC:\Windows\Fontsにはmeiryo.ttcmeiryob.ttcが含まれていますので、追加で設定する必要は無くそのまま利用することができます。

作成したワークシートをPDF出力する際の日本語フォントを設定する(DioDocs for Excel)
public static class Function4
{
    [FunctionName("Function4")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

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

        Workbook workbook = new Workbook();

        workbook.Worksheets[0].Range["A1"].Font.Name = "メイリオ";
           
        workbook.Worksheets[0].Range["A1"].Value = Message;

        byte[] output;

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

        return new FileContentResult(output, "application/pdf")
        {
            FileDownloadName = "Result.pdf"
        };
    }
}
作成したワークシートをPDF出力する際の日本語フォントを設定する(DioDocs for Excel)

「IPAexフォント」のようなアプリケーションの実行環境(Windows)のC:\Windows\Fontsに含まれていない日本語フォントを利用する場合は、日本語フォントをアプリケーションのコンテンツとして配置し、FontsFolderPathプロパティで参照する方法があります。

まず、以下のように「IPAexゴシック」のフォントipaexg.ttfをアプリケーションのプロジェクトに追加します。

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

このフォントが含まれるfontsフォルダへのパスをFontsFolderPathプロパティに設定します。この設定によりFontプロパティで設定した「IPAexゴシック」が利用できます。

public static class Function4
{
    [FunctionName("Function4")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, Microsoft.Azure.WebJobs.ExecutionContext context,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

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

        Workbook workbook = new Workbook();

        Workbook.FontsFolderPath = Path.Combine(context.FunctionAppDirectory, "fonts");

        workbook.Worksheets[0].Range["A1"].Font.Name = "IPAexゴシック";

        workbook.Worksheets[0].Range["A1"].Value = Message;

        byte[] output;

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

        return new FileContentResult(output, "application/pdf")
        {
            FileDownloadName = "Result.pdf"
        };
    }
}
作成したワークシートをPDF出力する際の日本語フォントを設定する(DioDocs for Excel)

作成したPDFドキュメントを保存する際の日本語フォントを設定する(DioDocs for PDF)

DioDocs for PDFで作成したPDFドキュメントで日本語フォントを利用する場合も「作成したワークシートをPDF出力する際の日本語フォントを設定する(DioDocs for Excel)」と同じような動作になります。

Azure Functionsアプリケーションの実行環境(Windows)のC:¥Windows¥Fontsにインストールされている日本語フォントであればFontNameプロパティで設定するだけです。

例えば、FontNameプロパティで「メイリオ」を設定してPDFドキュメントを作成した場合、Azure Functionsの実行環境のC:\Windows\Fontsにはmeiryo.ttcmeiryob.ttcが含まれていますので、追加で設定する必要は無くそのまま利用することができます。

public static class Function3
{
    [FunctionName("Function3")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

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

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

        g.DrawString(Message,
            new TextFormat() { FontName = "メイリオ", FontSize = 12 },
            new PointF(72, 72));

        byte[] output;

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

        return new FileContentResult(output, "application/pdf")
        {
            FileDownloadName = "Result.pdf"
        };
    }
}
作成したPDFドキュメントを保存する際の日本語フォントを設定する(DioDocs for PDF)

「IPAexフォント」のようなアプリケーションの実行環境(Windows)のC:\Windows\Fontsに含まれていない日本語フォントを利用する場合は、日本語フォントをアプリケーションのコンテンツとして配置し、Fontプロパティで参照する方法があります。

public static class Function3
{
    [FunctionName("Function3")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, Microsoft.Azure.WebJobs.ExecutionContext context,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

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

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

        Font font = Font.FromFile(Path.Combine(context.FunctionAppDirectory, "fonts", "ipaexg.ttf"));

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

        byte[] output;

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

        return new FileContentResult(output, "application/pdf")
        {
            FileDownloadName = "Result.pdf"
        };
    }
}
作成したワークシートをPDF出力する際の日本語フォントを設定する(DioDocs for Excel)

日本語フォントの配置方法は「作成したワークシートをPDF出力する際の日本語フォントを設定する(DioDocs for Excel)」と同じです。


本記事ではAzure FunctionsでDioDocsを利用する際に、日本語フォントを使用するTipsを紹介しましたが、Azure Functionsの実行環境としてWindowsを選択した場合のTipsでした。

実行環境としてLinuxを選択した場合についても今後の記事で紹介したいと思います。