0

我正在尝试./tagslegend.html使用 npm 包呈现此 html 文档wkhtmltox

<!doctype html>
<html>
  <head>
    <style>
      .cmn {
        font-family: 'WenQuanYi Micro Hei';
      }
    </style>
  </head>
  <body>
    <dl>
      <dt class="cmn">中文</dt><dd>In mandarin language.</dd>
    </dl>
  </body>
</html>

这是javascript:

const express = require('express');
const fs = require('fs');
const wkhtmltox = require('wkhtmltox');

const app = express();
const converter = new wkhtmltox();

app.get('/tagslegend.png', (request, response) => {
  response.status(200).type('png');
  converter.image(fs.createReadStream('tagslegend.html'), { format: "png" }).pipe(response);
});

var listener = app.listen(process.env.PORT, function () {
  console.log('App listening on port ' + listener.address().port);
});

我希望它像我的浏览器一样呈现相同的 html:

在此处输入图像描述

但是我却得到了这样的png:

在此处输入图像描述

我该如何解决这个问题并让它像第一张图片一样渲染?

我在服务器上安装了该字体:

$ fc-list | grep 'Wen'
/app/.fonts/WenQuanYi Micro Hei.ttf: WenQuanYi Micro Hei,文泉驛微米黑,文泉驿微米黑:style=Regular
4

1 回答 1

0

这看起来像一个字符编码问题。似乎fs.createReadStream()正在将您的 HTML 读取为 ISO-8859-1,而实际上它应该将其读取为 UTF-8——这很奇怪,因为 UTF-8 是默认编码。

我会确保tagslegend.html正确保存为 UTF-8 文件。明确声明:

<meta charset="utf-8">

...在<head>您的 HTML 部分中也是如此。

于 2018-02-25T19:51:54.107 回答