使用iTextSharp以PDF格式显示html表中的中文字符

时间:2014-03-26 17:13:17

标签: c# itextsharp

我已经能够按照这里的例子,如果他们在一张桌子之外,就可以显示中文字符,但是他们不会在表格的单元格内显示。

这是示例html代码 -

@{
    <head>
    <title>Daily Production Report 国务院公布了房</title>
    </head>
}

@{
    <table style="width: 61%; font-size:x-small; font-family:'Arial Unicode MS'" border="1">
    <tr>
    <td style="width: 78px">Date:</td>
    <td style="width: 200px">&nbsp;</td>
    <td style="width: 80px">Order ID</td>
    <td style="width: 200px">国务院公布了房</td>
    <td style="width: 112px">Total Pieces</td>
    <td style="width: 200px">&nbsp;</td>
    </tr>
    </table>
}

这是背后的代码 -

FontFactory.Register("c:/windows/fonts/ARIALUNI.TTF");
StyleSheet style = new StyleSheet();
style.LoadTagStyle("body", "face", "Arial Unicode MS");
style.LoadTagStyle("body", "encoding", BaseFont.IDENTITY_H);
using (Document document = new Document())
{
    PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));

    document.Open();
    foreach (IElement element in HTMLWorker.ParseToList(
        new StringReader(HTMLData.ToString()), style))
    {
        document.Add(element);
    }
    document.Close();

}

1 个答案:

答案 0 :(得分:1)

虽然您的HTML有效,但HTMLWorker打破了您将字体名称用HTML中的单引号括起来的事实。将font-family:'Arial Unicode MS'更改为font-family:Arial Unicode MS对我有用。更好的是,如果您控制HTML,那么只需完全删除font-family声明,因为<body>标记只会继承其他所有内容。

如果您无法更改生成的HTML,则在声明时也可以实际重命名/重新别名Arial。

//Register one alias
FontFactory.Register("C:\\Windows\\Fonts\\ARIALUNI.TTF", "Arial Unicode MS");
//Register another alias
FontFactory.Register("C:\\Windows\\Fonts\\ARIALUNI.TTF", "'Arial Unicode MS'");

此外,请注意HTMLWorker长时间不赞成使用XMLWorker