Ротатива wkHTMLtoPDF заголовок html utf8 - PullRequest
0 голосов
/ 23 июня 2018

Я использую Rotativa (wkHTMLtoPDF) в .NET Core 2. Когда я хочу отправить параметр в заголовок и нижний колонтитул html на персидском языке (utf-8), он не может разобрать его значение true, и вместо этого я вижу ???? ????? ????моих слов.

            var fileHeader = Path.Combine(Directory.GetCurrentDirectory(),
                       "wwwroot", "html", "pdfTemplate", "myHeader.html");
            var fileFooter = Path.Combine(Directory.GetCurrentDirectory(),
                       "wwwroot", "html","pdfTemplate", "myFooter.html");
            string cusomtSwitches = $"--footer-html {fileFooter} --footer-spacing 0 --header-html {fileHeader} --header-spacing 0 --replace test 15 --encoding utf-8 --replace totalValue \"بهمن شفیعی هستم\"";                
            var retVal = new ViewAsPdf("Preview", model)
            {
                //FileName = "Test.pdf",
                PageSize = RotativaCore.Options.Size.A4,
                PageOrientation = RotativaCore.Options.Orientation.Portrait,
                PageMargins = { Left = 1, Right = 1 },
                ContentDisposition = ContentDisposition.Inline,
                IsJavaScriptDisabled = false,
                DisableSmartShrinking=true,
                CustomSwitches = cusomtSwitches,
                IsLowQuality=false,

            };

Мой HTML-код:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" http-equiv="encoding" />
    <title></title>
    <script>
    function subst() {
        var vars = {};
        var query = document.location
            .toString()
            // get the query string
            .replace(/^.*?\?/, '')
            // and remove any existing hash string (thanks, @vrijdenker)
            .replace(/#.*$/, '')
            .split('&');

        for (var i = 0, l = query.length; i < l; i++) {
            var aux = decodeURIComponent(query[i]).split('=');
            vars[aux[0]] = aux[1];
        }
        var x = ['frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection', 'test', 'totalValue'];
        for (var i in x) {
            var y = document.getElementsByClassName(x[i]);
            for (var j = 0; j < y.length; ++j) y[j].textContent = vars[x[i]];

        }
    }

    </script>
</head>
<body onload="subst()">
<table class="table table-bordered;" style="font-family:'B Nazanin'" dir="rtl">
    <tr>
        <td style="text-align:right">
            جمع کل صورت حساب <span class="totalValue"></span>
        </td>
        <td style=" text-align:center"><img style="width:100px;" src="http://www.gammadesk.com/wp-content/uploads/2015/10/Gamma-2rang-22.png" /></td>
        <td>شماره سند:<span class="test"></span></td>
    </tr>
</table>

И мой вывод: enter image description here

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Это сработало для меня:

 string.Format("  --footer-center \"{0}\"   --no-footer-line  --encoding 'UTF-8' "
+ " --footer-font-size \"12\" --footer-font-name \"B Mitra\" "
+ "--footer-spacing -2 "
, "تست" );
0 голосов
/ 23 июня 2018

Я нашел решение для этого. Я кодирую строку в C # и декодирую ее на JavaScript.

            String t1 = "بهمن شفیعی هستم";                
            List<int> arr = new List<int>();
            t1.Each(c => arr.Add(Convert.ToInt32(c)));                
            string cusomtSwitches = $"--footer-html {fileFooter} --footer-spacing 0 --header-html {fileHeader} --header-spacing 0 --replace test 15 --encoding \"utf-8\" --replace totalValue \"{string.Join(",", arr)}\"";

Javascript код:

var array=[];
vars[css_selector_classes[css_class]].split(',').forEach(function (s, e) {
    array.push(s);
});
res = String.fromCharCode.apply(null,array);
element[j].textContent = res;
...