6

我正在使用 wkhtmltopdf 将 html 转换为 pdf。问题是带有 č、š、ž、đ 等字符的字体(这些是塞尔维亚语、克罗地亚语、斯洛文尼亚语使用的字符)。它们不会以 pdf 格式显示。Html 正确呈现。

这就是我的 html 的构造方式:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Export</title>
</head>
<body>
    <h3>č,š,ž,đ</h3>
</body>
</html>

在我使用 wkhtmptopdf 的 C# 代码中,我这样做了

        Process p;
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = HtmlToPdfExePath;
        psi.WorkingDirectory = Path.GetDirectoryName(psi.FileName);

        // run the conversion utility
        psi.UseShellExecute = false;
        psi.CreateNoWindow = true;
        psi.RedirectStandardInput = true;
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardError = true;

        // note: that we tell wkhtmltopdf to be quiet and not run scripts
        string args = "-q -n ";
        args += "--disable-smart-shrinking ";
        args += "--orientation Portrait ";
        args += "--outline-depth 0 ";
        args += "--page-size A4 ";
        args += "--encoding utf-8";
        args += " - -";

        psi.Arguments = args;

        p = Process.Start(psi);

如您所见,我在 html 和 wkhtmltopdf 上使用 utf-8 编码作为参数,但字符不能正确呈现。我错过了什么?以下是我在 pdf 中得到的内容。英文字符呈现正常。

这是 pdf 作为图像

4

1 回答 1

13

重定向流的默认编码由您的默认代码页定义。您需要将其设置为 UTF-8。

不幸的是Process,不允许您这样做,因此您需要自己制作StreamWriter

StreamWriter stdin = new StreamWriter(process.StandardInput.BaseStream, Encoding.UTF8);
于 2012-12-27T16:28:41.973 回答