読者です 読者をやめる 読者になる 読者になる

ASP.NET MVC 5 でビューを PDF に変換

以前、iTextSharp を使って ASP.NET MVC で PDF を作成する方法を試した。

ASP.NET MVC で PDF を作成 - present

ただ、実現したいのは「表示している HTML を PDF でダウンロードする機能」なので、 iTextSharp だと HTML と同じような見た目になるように、自力でゴリゴリ頑張る必要があってツライ。

例えば、Rails で wicked_pdf を使ったときのように、HTML から PDF に変換するのが一番いい。 wicked_pdf は wkhtmltopdf を Rails で使うラッパー gem なので、 .NET にも同じようなものがあるかもしれない。

ネットで探して見つけたのは次の 3 つ。

この中で今も開発が活発なのは TuesPechkin だったので、今回はこのライブラリを採用してみた。

ASP.NET MVC プロジェクトに、NuGet でパッケージを追加。

Install-Package TuesPechkin
Install-Package TuesPechkin.Wkhtmltox.Win32

試しに、トップページを PDF に変換するサンプルを書いてみた。

using System.Drawing.Printing;
using System.Web.Mvc;
using TuesPechkin;

namespace PdfSample.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Pdf()
        {
            var helper = new UrlHelper(ControllerContext.RequestContext);
            var indexUrl = helper.Action("Index", "Home", null, Request.Url.Scheme);

            var document = new HtmlToPdfDocument()
            {
                GlobalSettings =
                {
                    ProduceOutline = true,
                    DocumentTitle = "PDF Sample",
                    PaperSize = PaperKind.A4,
                    Margins =
                    {
                        All = 1.375,
                        Unit = Unit.Centimeters
                    }
                },
                Objects =
                {
                    new ObjectSettings() {
                        PageUrl = indexUrl,
                    },
                }
            };

            var converter = new StandardConverter(
                new PdfToolset(
                    new Win32EmbeddedDeployment(
                        new TempFolderDeployment()
                    )
                )
            );

            var pdfData = converter.Convert(document);

            return File(pdfData, "application/pdf", "PdfSample.pdf");
        }
    }
}

デバッグ実行し、Web ブラウザで /Home/Pdf にアクセスすると、PDF ファイルをダウンロードできる。

f:id:griefworker:20150216211610p:plain