如何在jsPDF库中启用UTF-8

mpa*_*c89 10 html javascript pdf utf-8 jspdf

我很高兴使用jsPDF库帮助我将我的HTML页面导出为PDF文件.我遇到了一些困难.我从http://parall.ax/products/jspdf/下载了这个库.当我使用像š,ć(UTF-8)这样的字符时,在pdf中它们看起来像错误.即使我通过doc.text插入.在图书馆的网站上,当我使用他们的例子并使用其中一些字符更改文本时 - 它可以工作.因此,假设使用UTF-8.为什么它不能在我的电脑上工作.

我提供了我的代码.这里缺少的是lib(可以从网站上下载),你会看到我的问题.为什么CSS在pdf中消失了?

testing.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TESTING JSPDF LIB</title>
<script type="text/javascript" src="pdffile.js" charset="utf-8"></script>
<script type="text/javascript" src="jspdf/jquery/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="jspdf/jspdf.js"></script>
<script type="text/javascript" src="jspdf/libs/Deflate/adler32cs.js"></script>
<script type="text/javascript" src="jspdf/libs/FileSaver.js/FileSaver.js"></script>
<script type="text/javascript" src="jspdf/libs/Blob.js/BlobBuilder.js"></script>
<script type="text/javascript" src="jspdf/jspdf.plugin.addimage.js"></script>
<script type="text/javascript" src="jspdf/jspdf.plugin.standard_fonts_metrics.js"></script>
<script type="text/javascript" src="jspdf/jspdf.plugin.split_text_to_size.js"></script>
<script type="text/javascript" src="jspdf/jspdf.plugin.from_html.js"></script>
<script>
function redirect() {
    document.write("Hello world" + '<br />');
}
</script>
</head>

<body>
<div id="box" class="box-shadow">
    <input type="submit" name="ok" id="ok" value="LETS TRY" onClick="redirect();pdf();" /> </div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

pdffile.js

function pdf() {
document.write('<div id="mydiv" style="background-color:#CCC; width:780px;640px;"><p>Open these letters š and c in PDF file and see error</p></div><br />');
document.write('<button id="export">OPEN IN PDF FILE</button>');

$(function () {
    var doc = new jsPDF();
    doc.text(35, 25, "Text with the letter Š");
    var specialElementHandlers = {
        'body': function (element, renderer) { 
            return true;
        }
    };
    $('#export').click(function () {
        doc.fromHTML($('#mydiv').html(), 15, 15, {
            'width': 170,
                'elementHandlers': specialElementHandlers
        });
        doc.save('sample-file.pdf');
    });
});
}
Run Code Online (Sandbox Code Playgroud)

bey*_*int 8

截至2015年,jsPDF不能正确支持UTF-8,解决方法是使用html2canvas渲染jpg或png并将其添加到pdf.您可以使用以下代码段来获得一个想法:

var doc = new jsPDF();

var utf_8_string_to_render = 'any_value_you_want';

Promise.all(
[
    new Promise(function (resolve) 
    {
        var temp = document.createElement("div");
        temp.id = "temp";
        temp.style = "color: black;margin:0px;font-size:20px;";
        phrase = utf_8_string_to_render;
        temp.innerHTML= phrase;
        //need to render element, otherwise it won't be displayed
        document.body.appendChild(temp);

        html2canvas($("#temp"), {
        onrendered: function(canvas) {

                $("#temp").remove();
            resolve(canvas.toDataURL('image/png'));
        },
        });
    })
]).then(function (ru_text) { 

    doc.addImage(ru_text[0], 'JPEG', 0,0);
    doc.text(0, 10, 'Non-utf-8-string' );

    doc.save('filename.pdf');
    });


};
Run Code Online (Sandbox Code Playgroud)

另一个支持utf-8编码的库是:

  • PDFKit,据报道,您可以使用坐标正确放置文本.
  • PDFMake,正确呈现UTF-8字符,但不允许您定位文本,除了使用边距样式化.


Joã*_*ira 6

jsPDF 仍然不支持 UTF-8。虽然 pdfmake.org 似乎支持 UTF-8。尝试使用他们的游乐场并用您自己的角色进行测试。


小智 6

经过一天的搜索后我得到了答案,扔掉了所有网站。

\n\n
toPDF(): void {\n    const AmiriRegular = \'AAEAAAASAQAABAAgRFNJR2D2zXQA.....A\';\n\n    const doc = new jsPDF({ filters: ["ASCIIHexEncode"] });\n\n    doc.addFileToVFS("Amiri-Regular.ttf", AmiriRegular);\n    doc.addFont("Amiri-Regular.ttf", "Amiri", "normal");\n\n    doc.setFont("Amiri"); // set font\n    doc.setFontSize(10);\n\n    doc.text(10,10,\'\xd7\x90\xd7\x95\xd7\x94\xd7\x91 \xd7\x90\xd7\x95\xd7\xaa\xd7\x9a\'.split(\'\').reverse().join(\'\'));\n       this.CAccounts.forEach(function (AccountsBody, i) {\n      doc.text(20, 20 + (i * 10),\n\n\n        "ID: " + AccountsBody.ID +\n        "NAME: " + AccountsBody.NAME.split(\'\').reverse().join(\'\'));\n    });\n    doc.save(\'employee.pdf\');\n\n  }\n
Run Code Online (Sandbox Code Playgroud)\n