本記事では、Azure Functionsで「DioDocs(ディオドック)」を使用したC#( .NET Core 3.1)のクラスライブラリをベースにした関数を作成し、ExcelやPDFファイルを出力する方法について紹介します。
目次
Azure Functionsとは
Azure FunctionsはMicrosoft Azureで提供されている、各種イベントをトリガーに処理を実行するサーバーレスなアプリケーションを作成できるクラウドサービスです。
今回はVisual Studio 2019でAzure Functionsアプリケーションを作成し、Azureへデプロイして確認してみます。
実装する内容
今回実装する内容は非常にシンプルです。Azure FunctionsアプリケーションでHTTPトリガーを使用する関数を作成します。関数の実行時にDioDocsを使用してExcelとPDFファイルを作成し、クエリパラメータで受け取った文字列を追加します。その後、作成したExcelとPDFファイルをFileContentResultで直接ローカルへ出力する、といった内容です。
アプリケーションを作成
以下のドキュメントを参考にAzure Functionsアプリケーションを作成していきます。
クイック スタート:Visual Studio を使用して Azure で初めての関数を作成する
Visual Studio 2019でプロジェクトテンプレート「Azure Functions」を選択して[次へ]をクリックします。
プロジェクト名DioDocsFileExportFunctionApp
を入力して[作成]をクリックします。
Azure Functionsで作成する関数のテンプレートを選択します。Http Trigger
を選択して[作成]をクリックします。
DioDocsFileExportFunctionApp
プロジェクトが作成されます。
NuGetパッケージの追加
Visual Studioの「NuGet パッケージ マネージャー」からDioDocsのパッケージGrapeCity.DioDocs.Excel.ja
、GrapeCity.DioDocs.Pdf.ja
をインストールします。
DioDocs for Excelを使うコードを追加
DioDocsでExcelファイルを作成するコードを追加してFunction1
を以下のように更新します。
public static class Function1
{
[FunctionName("Function1")]
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)
? "Hello, World!!"
: $"Hello, {name}!!";
Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Value = Message;
byte[] output;
using (var ms = new MemoryStream())
{
workbook.Save(ms, SaveFileFormat.Xlsx);
output = ms.ToArray();
}
return new FileContentResult(output, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = "Result.xlsx"
};
}
}
DioDocs for PDFを使う関数を追加
ソリューションエクスプローラーからDioDocsFileExportFunctionApp
プロジェクトを右クリックして[追加]-[新しい Azure 関数]を選択して、DioDocsでPDFファイルを作成する関数Function2
を追加します。
関数のテンプレートを選択します。Http Trigger
を選択して[追加]をクリックします。
DioDocs for PDFを使うコードを追加
DioDocsでPDFファイルを作成するコードを追加してFunction2
を以下のように更新します。
public static class Function2
{
[FunctionName("Function2")]
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)
? "Hello, World!!"
: $"Hello, {name}!!";
GcPdfDocument doc = new GcPdfDocument();
GcPdfGraphics g = doc.NewPage().Graphics;
g.DrawString(Message,
new TextFormat() { Font = StandardFonts.Helvetica, 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"
};
}
}
デバッグ実行で確認
作成したAzure Functionsアプリケーションをローカルでデバッグ実行して確認します。Visual Studioからデバッグ実行すると以下のコンソールが表示されます。
アプリケーションに含まれる関数のURLはhttp://localhost:7071/api/Function1
、http://localhost:7071/api/Function2
となっています。このURLにクエリパラメータと文字列?name=DioDocs
を追加して、それぞれの関数をブラウザで実行します。
ローカルのフォルダに保存されたResult.xlsx
、Result.pdf
を確認します。クエリパラメータで渡した文字列DioDocs
が表示されていれば成功です。
Azureへデプロイ
作成したAzure FunctionsアプリケーションをAzureへデプロイして確認します。ソリューションエクスプローラーからDioDocsFileExportFunctionApp
プロジェクトを右クリックして[発行]を選択します。
公開するターゲットは「Azure」を選択します。特定のターゲットは「Azure Function App (Windows)」を選択します。
アプリケーションの名前やリソースグループなどを設定して[作成]をクリックします。
以下の画面に切り替わったら[完了]をクリックします。
これで公開の準備が完了しました。Visual Studioで[発行]をクリックして作成したAzure FunctionアプリケーションをAzureへデプロイします。
公開が完了するとメッセージが表示されます。
デプロイしたアプリケーションを確認
Visual StudioのCloud ExplorerからデプロイしたAzure Functionsアプリケーションを選択して「ポータルで開く」をクリックします。Azureポータルでデプロイしたアプリケーションが表示されます。
Azureポータルで「関数」を選択するとAzure Functionsアプリケーションに含まれる関数Function1
、Function2
が表示されます。
関数Function1
をクリックして「コードとテスト」を選択します。「関数の URL を取得」が表示されるのでこちらをクリックします。
ポップアップで表示される「クリップボードにコピー」をクリックして関数のURLをコピーします。
コピーしたURLをブラウザに張り付けて、さらにクエリパラメータと文字列&name=DioDocs
を追加します。
関数を実行するとデバッグ実行時と同じように、クエリパラメータで渡した文字列が追加されたExcelファイルがローカルに出力されます。関数Function2
も同じ手順で確認できます。
さいごに
動作を確認できるAzure Functionsアプリケーションのサンプルはこちらです。
https://github.com/GrapeCityJP/DioDocsFileExportFunctionApp
本記事ではFileContentResultクラスを使用して直接ローカルへExcelとPDFファイルを出力する方法を紹介しましたが、ファイルの保存先としてAzure Storageを使うより実践的な方法もあります。こちらは次回の記事で紹介しています。
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。