ASP.NET MVCでPDFを出力する(RazorPDF)

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)

...
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;
    }
...
}
...

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

これを出力するビューを作成します。
まずはレイアウトファイルです。(Shared/_PdfLayout.cshtml)

<itext creationdate="@DateTime.Now.ToString()" producer="RazorPDF">
    @RenderBody()
</itext>

中身のファイルは下記の通り。(Home/PeoplePdf.cshtml)

@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>

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

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

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

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

5.サンプルコード

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

6.最後に

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

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。