7

この質問は、NReco の PdfGeneratorコンポーネントに関するものです。

この製品を使用して、動的に生成された HTML 文字列を C# を使用して .NET MVC フレームワーク内の Pdf ドキュメントに変換します。

Pdf のフッターにページ番号 (例: 1/5) を追加する方法を探しているときに、SOでこれこれに出会いました。当然のことながら、どちらのオプションも同じ目標を達成するための同様のアプローチを提供しているようです。

コード自体は理にかなっていますが、私が理解するのに苦労しているのはこれです - 私のドキュメントの内容 (または HTML 文字列) はビュー内で生成されます。HTML 文字列は、実際の変換プロセスのためにコントローラー (.cs) に渡されます。MVC フレームワークに関する私の非常に限られた知識では、コントローラーに JavaScript コードを追加する方法はないと思います (またはありますか?)。

そのため、ドキュメント変換を処理する C# 関数内に上記の 2 つの JavaScript ベースのメソッドを組み込む方法がよくわかりません。それとも、これはビュー内で行うべきことですか?

コントローラ:

[HttpPost]
public ActionResult Html2Pdf(FormCollection form) {

    var docTitle = form["doctitle"].ToString();

    var headerHtml =
        "<div style='width:100%; margin-top:1em; display:block;'>" +
            "<img src='" + System.Web.HttpContext.Current.Server.MapPath("~") + "/media/images/document_banner.png' />" +
        "</div>" +
        "<div style='width:100%; bottom:110px; left:0; position:relative; display:block;'>" +
            "<span style='color:#fff; font-size:2.5em; font-family:georgia; margin-left:1em;'>" + docTitle + "</span>" +
        "</div>";

    var footerHtml =
        "<div style='width:100%; text-align:center; border-top:1px solid #abc; margin-top:2em;'>Page 0 of 0</div>;

    var htmlToPdf = new HtmlToPdfConverter();

    // various parameters get set here
    htmlToPdf.PageHeaderHtml = headerHtml;
    htmlToPdf.PageFooterHtml = footerHtml;
    ....

    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=MyTestDocument.pdf");
    htmlToPdf.GeneratedPdf(form["htmlcontent"].ToString(), null, Response.OutputStream);    // form["htmlcontent"] holds the document body
    Response.End();

    Return new EmptyResult();
}
4

3 に答える 3

13

PageHeaderHtml または PageFooterHtml プロパティを設定すると、PdfGenerator がページ番号をレンダリングするため、JavaScript コード (wkhtmltopdf ヘルプから) を追加する必要はありません。必要なのは、ページ番号を表示したい場所を「ページ」クラス要素でマークするだけです:

htmlToPdf.PageHeaderHtml = "<div>Page: <span class="page"></span></div>";

それで全部です。

于 2015-01-26T08:34:43.887 に答える