前回と前々回の記事では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明朝";
セルではなくシート全体のフォントを設定したい場合はこちらのナレッジベースを参考にしてください。
ワークシートをPDF出力する際の日本語フォント(DioDocs for Excel)
DioDocs for ExcelではFontsFolderPath
プロパティで参照するフォルダを設定していない場合、Azure Functionsアプリケーションの実行環境(Windows)のC:¥Windows¥Fonts
にインストールされている日本語フォントであればFont
プロパティで設定するだけです。
例えば、Font
プロパティで「メイリオ」を設定してワークシートをPDF出力した場合、Azure Functionsの実行環境のC:\Windows\Fonts
にはmeiryo.ttc
とmeiryob.ttc
が含まれていますので、追加で設定する必要は無くそのまま利用することができます。
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"
};
}
}
「IPAexフォント」のようなアプリケーションの実行環境(Windows)のC:\Windows\Fonts
に含まれていない日本語フォントを利用する場合は、日本語フォントをアプリケーションのコンテンツとして配置し、FontsFolderPath
プロパティで参照する方法があります。
まず、以下のように「IPAexゴシック」のフォントipaexg.ttf
をアプリケーションのプロジェクトに追加します。
このフォントが含まれる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 PDF)
DioDocs for PDFで作成したPDFドキュメントで日本語フォントを利用する場合も「作成したワークシートをPDF出力する際の日本語フォントを設定する(DioDocs for Excel)」と同じような動作になります。
Azure Functionsアプリケーションの実行環境(Windows)のC:¥Windows¥Fonts
にインストールされている日本語フォントであればFontName
プロパティで設定するだけです。
例えば、FontName
プロパティで「メイリオ」を設定してPDFドキュメントを作成した場合、Azure Functionsの実行環境のC:\Windows\Fonts
にはmeiryo.ttc
とmeiryob.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"
};
}
}
「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)」と同じです。
さいごに
本記事ではAzure FunctionsでDioDocsを利用する際に、日本語フォントを使用するTipsを紹介しましたが、Azure Functionsの実行環境としてWindowsを選択した場合のTipsでした。
実行環境としてLinuxを選択した場合についても今後の記事で紹介したいと思います。
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。