无法使用pdfkit.js加载日文字体,错误:不支持的字体格式或标准PDF字体。

3
请看这个 fiddle 示例。我对处理 pdf 字体的知识较少。我正在使用 pdfkit 生成 pdf。我试图加载日语字体,但没有成功。我遵循了 stackoverflow 上的大部分文章,但无法将日语文本写入 pdf。
 var doc = new PDFDocument();
        var stream = doc.pipe(blobStream());      
        // draw some text
        doc.fontSize(25)
           .text("hello world", 100, 80);

            var oReq = new XMLHttpRequest();
        oReq.open("GET", "//fonts.gstatic.com/ea/mplus1p/v1/Mplus1p-Thin.ttf", true);
        oReq.responseType = "arraybuffer";

        oReq.onload = function (oEvent) {
            var arrayBuffer = oReq.response; // Note: not oReq.responseText
            if (arrayBuffer) {
                doc.registerFont('OpenSans', arrayBuffer)
                doc.fontSize(25);
                doc.font('OpenSans').text('こんにちは世界')
            }
        };

        oReq.send(null);

        // end and display the document in the iframe to the right
        doc.end();
        stream.on('finish', function () {
           document.getElementById('myiframe').src = stream.toBlobURL('application/pdf');
            console.log(stream.toBlobURL('application/pdf'))
             document.getElementById('spnmessage').innerText = "can't load the pdf in iframe in the jsfiddle. You can open the pdf through console"
        });

这里是 fiddle


有几件事情需要注意:你的fiddle在Chrome中无法工作,你正在加载一个名为Mplus1p的字体,但却称其为“OpenSans”,而且你对registerFont的调用似乎不遵循pdfkit文档所说应该传递的参数。最后,你确定你加载的字体通过了正确的字体验证(使用TTX或其他工具),因为你并没有将其用作Web字体,而是尝试将其作为完整的OpenType字体来排版。 - Mike 'Pomax' Kamermans
你们找到问题了吗?我在同一点被阻止了。https://stackoverflow.com/questions/50052154/pdfkit-not-displaying-pdf-in-jsfiddle - Hugo LOPEZ
2个回答

2
这段话的意思是:“这里提到的解决方案对我很有用。基本上,我从这里下载了日文字体。然后将它们放在我的nodejs项目中(例如,<project_root>/src/fonts),并在控制器中使用以下命令导入该文件。”
let fontpath = (__dirname+'/../fonts/TimesNewRoman.ttf');
doc.font(fontpath);

关键是使用__dirname来定位路径。
附加参考: 使用Node.js创建付款清单 - 使用pdfkit

你好,能分享一下ttf字体吗?看起来网站目前无法访问。 - Joel

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接