none
ASP.NET MVC5 PDFファイル生成 ダウンロード RRS feed

  • 質問

  • インターネット公開のWEBページで画面より、ボタンをクリックすると
    フォームで入力した内容を、データベースに保存し、
    該当するデータよりA4サイズで1枚 書類を作成し、ダウンロードできる
    機能を実現しようとしています。
    -------------
    環境は
    ASP.NET MVC5 
    OS:Windows Server 2012 
    IIS 8.5 
    データベース:SQL Server 2015
    httpsで公開されるページです。
    一日に3000以上のPDF出力が予測されています。
    -----------

    表示しているホームページをPDFで印刷したいということではなく、
    罫線、印字位置、フォントサイズが決まった日本語文字を使用する書類
    ※役所に提出する申請書類のような形式のものです。)
    を使用します。
    作成したPDFは、クライアント側にダウンロードできれば、
    サーバー側に保存する必要は有りません。

    TuesPechkinを使用してビューを PDF に変換
    する方法は試みましたが、IISがフリーズしたり、動作が不安定
    なのと、
    HTMLからPDFにジェネレートされるときに、様式が複雑なこともあり、
    有効になる命令、思った印刷になるHTML、CSSを作成するのに
    非常に手間がかかり、困難であるため、採用不可と判断しました。

    現在、バックヤードで、
    Webページからデータが書き込まれたら
    繰り返しデータを見てはPDFを作成して決まったフォルダに
    指定のファイル名で保存するプログラムを作成し、
    常時実行状態(OPENしたまま)にすることで、
    物理的に、PDFファイルをサーバー内に保存しておき。
    この物理的に保存されているPDFファイルを
    ASP.NET MVCで
     return File(PDFの保存場所, pdfのファイル名, ダウンロードさせる時のpdfのファイル名);
    により、クライアントでダウンロードさせて、何とか実現しています。

    -------------
    質問
    1.バックヤードでサーバーに物理的なファイルは必要ない、
    ASP.NET MVCのページで、
    PDFファイルをダウンロードさせる方法をを取りたい、
    データベースからのデータを入れた、
    レポートをPDFをジュエネレートして、クライアントでダウンロードする
    手立てで、良い方法はないでしょうか?

    有償ソフトを含め教えてください。

    2.1の方法で適切な方法がない場合、
    物理的なファイルを置いて、現行と同様の実現方法かと
    考えているのですが、
    もっと良い方法がないでしょうか?

    現時点のバックヤードのプログラムは、
    常時実行状態に不向きなACCESSを使用しており、
    原因不明の実行時エラーなどが起こり動作不安のため、
    別の言語のプログラム等方法を考えたい。
    ACCESSを使用したのは、思った形式のレポートの開発が、
    私にとっては簡易で、PDF作成の実行速度も
    速かったことから選択しましたが、まず言語の選択として
    ふさわしくないと思っています。

    ご教授 お願い申し上げます

    2017年3月31日 5:44

すべての返信

  • こんにちは。

    過去に以下の有償のライブラリを使って「1」を実現したことがあります(ASP.NET Web FormおよびASP.NET MVC)。

    VB-ReportはExcelファイルをサーバサイドで作成・加工するライブラリですが、PDFに変換することもできますのでその機能を使ってPDFダウンロード機能を実装したことがあります。
    ただし、利用できないExcelの機能もあります(例えばVB-Report 8ではグラフをPDF化するのは無理だったはず)。

    Asposeシリーズでは「Aspose.Cells for .NET」を使ったことがあります(VB-ReportでできなかったグラフのPDF化がでたために使ったという記憶があります)。
    私自身使ったことはないのですが、「Aspose.Pdf for .NET」だとHTMLなどもインプット形式として選択できるのでそちらのほうがMorningStorehouseさんの要件にあうかもしれませんね。

    実現できる機能のほかに、ライセンス(価格&利用条件)もありますのでそのあたり含めて検討する必要があるとは思いますが、取り急ぎ私が過去にやったことがあるものを書いてみました。


    きよくらならみ

    2017年3月31日 23:22
  • データベースに SQL Server を使っているなら、SQL Server Reporting Services で PDF をエクスポートするのが最もお手軽だと思います。

    PDF ファイルへのエクスポート (レポート ビルダーおよび SSRS)


    2017年4月1日 1:12
  • きよくらならみ 様

    ありがとうございます。
     両ソフト確認してみます。

    2017年4月1日 1:42
  • hihijiji 様

    ありがとうございます。

    SQL Server Reporting Services 
    使用する場合、PDFエクスポートというのは、バックヤードで物理的にフォルダにPDFを
    しまっておくということになるのかしらと思うのですが、MVCで連動できるのか よく読んでみます。

    2017年4月1日 13:38
  • hihijiji様

    SQL Server Reporting ServiecesはMVCに組み込みができるのですね。

    http://www.c-sharpcorner.com/article/ssrs-report-in-asp-net-mvc-5/
    にサンプルをみつけました。文字サイズ等の設定、罫線など設定できるかなど
    今回の帳票の仕様に合った作成できそうか、
    データベースサーバーはIISのサーバーと物理的に別だが制限にふれないかなど確認してみます。

    2017年4月1日 13:52
  • SQL Server Reporting Servieces(SSRS)はWebサーバ機能も持ってますので、SSRSにHTTPリクエストを送るだけで、PDFがその都度レンダリングされてダウンロードできます。
    IISとの構成にもよりますが、ダウンロードだけならハイパーリンクを張るだけでも連動可能です。
    2017年4月6日 2:59
  • ありがとうございます。全然勉強不足です。確認してみます。
    2017年4月6日 13:05
  • 既に検討済みかもしれませんが一応、PDFでなくHTML / CSSでのレイアウトも提案したいです。

    CSSはメディアタイプとしてprinterを指定したり、絶対単位としてcmやmmなどの長さを扱えたりもできます。PDFで苦労されるのとHTML / CSSでレイアウトを努力するのとを比較する価値はあるかと思います。

    ちなみにWindows 10付属の「Microsoft Print to PDF」やGoogle Chrome付属の「PDFに保存」というプリンターが用意されているため、クライアント側でのPDF生成も苦にならない時代になってきています。

    2017年4月6日 14:10
  • ありがとうございます。
    PDFでダウンロード保存というのが、前提だったので、選択できませんでしたが

    HTML/CSSで作成したページをTuesPechkinで変換する方法を、最初ためしました。
    かなりいろんなことができますね。
    今回は罫線枠が厳密にあり、画像との組み合わせで作成するなどの工夫がいり なかなか思ったように出すことができませんでしたが、今後使う場面がありそうです。 ありがとうございます。

    2017年4月20日 4:04