0.前置き

業務アプリケーションでは帳票は重要です。
帳票の種類やその出力方法も多岐にわたると思います。
フォーマットだと、Excel、Word、PDFなどが考えられます。
今回はその一例として、RazorPDFというものを使ってみようかと思います。

1.RazorPDFの紹介

RazorPDFはASP.NET MVCのRazor ViewEngineを利用してPDFファイルを出力します。
ViewにはiTextXMLというXMLをPDFに変換するライブラリーを使用します。
もともとSparkというViewEngineにあった機能を移植したものになります。

ぱっと探してみましたけど、ソースコードがどうやら公開されていないですね。
作成したAl Nyveldtさんのブログはこちら→「Introducing RazorPDF」
Al Nyveldtさんが作成したサンプルはこちら→「RazorPDFSample」
最新モジュールはnugetで配信されています→「RazorPDF for MVC」

2.インストール

基本的にはnugetを利用してインストールができます。

3.実際に使ってみる

コントローラーとビューを作ってみます。
今回は、Visual Studio 2012、.NET 4.5、APS.NET MVC 4を利用しています。

複数レコード出力するサンプル
コントローラは下記のようになります。(HomeController.cs)
[sourcecode language=”csharp”]

public class HomeController : Controller
{
public ActionResult PeoplePdf()
{
var people = new List<Person> {
new Person{Name="Satoshi", Age=24, Address = "Gifu"},
new Person{Name="Hanako", Age=23, Address = "Nagoya"},
new Person{Name="Steve", Age=29, Address = "Osaka"},
new Person{Name="Fu-ta", Age=25, Address = "Ishikawa"}
};

var result = new PdfResult(people, "PeoplePdf");
result.ViewBag.Title = "Today’s Member List";

return result;
}

}

[/sourcecode]

ActionResultを継承したPdfResultをViewに渡します。
PdfResultを生成する際に、Viewの名称を指定する必要がありますので注意。(ここだと、”PeoplePdf”)

これを出力するビューを作成します。
まずはレイアウトファイルです。(Shared/_PdfLayout.cshtml)
[sourcecode language=”xml”]
<itext creationdate="@DateTime.Now.ToString()" producer="RazorPDF">
@RenderBody()
</itext>
[/sourcecode]

中身のファイルは下記の通り。(Home/PeoplePdf.cshtml)
[sourcecode language=”xml”]
@model List<RazorPDFSampleBy84zume.Models.Person>
@{
Layout = Layout = "~/Views/Shared/_PdfLayout.cshtml";
}

<paragraph>
<phrase>@ViewBag.Title</phrase>
</paragraph>
<table width="100%" widths="25;25;50" columns="3" borderwidth="1.0"
left="true" right="true" top="true" bottom="true">
<row>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">Name</cell>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">Age</cell>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">Address</cell>
</row>
@foreach (var item in @Model)
{
<row>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">@item.Name</cell>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">@item.Age</cell>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">@item.Address</cell>
</row>
}
</table>
[/sourcecode]

ご覧の通り、iTextのXMLとRazorの構文の両方を使って記述できます。

出力結果をキャプチャして貼ります。

4.サンプルを書いてみての補足

かなり手軽にPDFファイルを出力できました。
HTMLのビューとおなじのりで出力するのはかなり良いです。
ただし、私の場合iTextXMLの構文がわからないので、今回は簡単なPDFファイルしか書けませんでした。
こちらも書けるようにするのが課題ですね。

5.サンプルコード

サンプルコードはgithubにホスティングしてあります。
RazorPDFのサンプル

6.最後に

今回はRazorPDFを用いたサンプルアプリケーションを作成してみました。
久しぶりにASP.NET MVCを触ったら、かなり忘れていました…。
あと、RazorPDFってコードが公開されていないようです。
公開してってお願いしてみようかな?