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ってコードが公開されていないようです。
公開してってお願いしてみようかな?
コメント