1

我正在使用 iTextSharp XMLWorkder 类将 HTML 转换为 PDF。一切正常,除非那里有任何空的 HTML 表,它将" "字符放入其中,然后在 PDF 中清晰可见。

我试图用空白空间或替换<br/>它,但它给出了错误“表格​​宽度必须大于零”。

有人可以建议我该怎么做吗?

4

1 回答 1

1

怀疑iTextSharp放在&#160;PDF中。相反,iTextSharp它足够聪明,可以正确地将其识别为非中断空间。这是证据:

    string HTML = @"
<div>
<h1>HTML Encoded non breaking space</h1><table border='1'><tr><td>&amp;#160;</td></tr></table>
<h1>HTML non breaking space</h1><table border='1'><tr><td>&#160;</td></tr></table>
<div style='background-color:yellow;'><h1>Empty Table</h1><table><tr><td></td></tr></table></div>
</div>
    ";

using (var stringReader = new StringReader(HTML))
{
    using (FileStream stream = new FileStream(
        outputFile,
        FileMode.Create,
        FileAccess.Write))
    {
        using (var document = new Document())
        {
            PdfWriter writer = PdfWriter.GetInstance(
                document, stream
            );
            document.Open();
            XMLWorkerHelper.GetInstance().ParseXHtml(
                writer, document, stringReader
            );
        }
    }
}

在此处输入图像描述

所以更可能的情况是HTML发送到解析器的编码&#160;&amp;#160;. 简单的解决方法是在编码的 HTML 实体进入解析器之前替换它:

HTML = HTML.Replace("&amp;#160;", "\u00A0");
于 2016-03-09T02:42:38.203 回答