2016-04-07 17 views
2

NReco.PdfConverterを使用してフォームのHTMLコードから解析されたPDFをダウンロードしようとしています。 AJAXが動作しないことを知った後、私は数多くの投稿で提案ごとにフォームアクションを実行しました。ASP.NET MVCのビューからHTML文字列からPDFをダウンロード

  1. どのように私は私のコントローラで醜い[ValidateResponse(false)]を置き換えるためにモデルを使用することができます。しかし、これは私が自分で把握することはできません新たな問題を提起しますか?
  2. ファイルが実際に開かれていることを確認するにはどうすればよいですか?
  3. 正しい方法でHTML文字列を書式設定して、PdfGeneratorで正しく動作するようにします。 PDFへのCSSを追加する

EDIT: 私はコントローラーのコードを更新し[OK]を、私は今、正常にPDFファイルを作成することができます。私は次のコード行を追加しました:

Response.ContentType = "application/pdf"; 
Response.ContentEncoding = System.Text.Encoding.UTF8; 
Response.AddHeader("Content-Disposition", "inline; filename=test.pdf"); 
Response.BinaryWrite(pdfBytes); 

しかし、内容は私が期待しているものではありません。 JSON.stringifyが文字列を正しくフォーマットしていないと思われます。私は間違ったjQueryセレクタを使用していて、実際に印刷ボタンを含むフォームを選択していたことがわかります。それが修正されたので、私は今CSSに欠けていることを除いて、HTML文字列をPDFにロードすることができます。どのように私はPDFファイルは、Webページとまったく同じように見えることができますか?

HTML:

<form action="User/Template/Print" method="POST" id="print-form" enctype="multipart/form-data"> 
    <input type="text" hidden ng-model="strHtml" name="strHtml" ng-init="printToPdf()" /> 
    <button class="btn btn-success" type="submit">@Html.Raw(new Icon("print").Html) Print</button> 
</form> 

AngularJS:

angular.module("app").controller("FormController", function ($scope) { 
    $scope.printToPdf = function() { 
     var strHtml = $('#werkorderFormulier form').html(); 
     $scope.strHtml = JSON.stringify(strHtml); 
    } 
}); 

TemplateControllerでプリントアクション:

public FileResult Print(FormCollection fC) 
{ 
    var pdfConverter = new HtmlToPdfConverter(); 
    var strHtml = fC.GetValue("strHtml").AttemptedValue; 
    var pdfBytes = pdfConverter.GeneratePdf(strHtml); 
    Response.ContentType = "application/pdf"; 
    Response.ContentEncoding = System.Text.Encoding.UTF8; 
    Response.AddHeader("Content-Disposition", "inline; filename=test.pdf"); 
    Response.BinaryWrite(pdfBytes); 
    return File(pdfBytes, "application/pdf"); 
} 

答えて

0

私はあなたがPDFを作成するために使用しているかわからないんだけど、私はそれを知っているすべて C#のPDFライブラリはCSSのサポートが限られています。 HTMLとCSSからPDFをサポートするライブラリは、HTMLとCSSを実際にPDF形式で理解できるコマンドに変換する必要があります。一部の図書館は他の図書館より優れた仕事をしていますが、1対1のパリティを達成していない図書館もあります。一般的に、あなたが期待できる最高のものはCSS Level 2です。実際にはかなり限られています。どれくらいのCSSレベル3が私たちをもたらしたのか、そして私たちがどのくらいコントロールすることができたかは驚くべきことです。

ウェブページのスクリーンショットのようなものをPDFとして入手する場合は、wkhtmltopdfというライブラリのみが有効です。これは、コードに追加できる真のライブラリではなく、コンパイルされたバイナリです。ファイルシステムを呼び出して実行する必要がありますが、これはあなた自身の信頼環境によっては理想的ではありません.WKHtmltopdfはSafariや以前のChromeで使用されていたWebKitエンジンと、オペラ。言い換えれば、それは文字通りブラウザのようにWebページをレンダリングし、基本的にビットマップをPDFに変換します。このようにして、ルック・アンド・フィールの完璧なパリティを得ることができます。

+0

私は[NReco.PdfGenerator](http://www.nrecosite.com/pdf_generator_net.aspx)を使用してPDFを生成しています –

関連する問題