iTextsharp - XmlWorker PDF -   在 PDF 中可见
iTextsharp - XmlWorker PDF -   visible in PDF
我正在使用 iTextSharp XMLWorkder class 将 HTML 转换为 PDF。一切正常,除非那里有任何空的 HTML table,它将 " "
字符放入其中,然后在 PDF 中清晰可见。
我试图用空 space 或 <br/>
替换它,但出现错误 "table width must be greater than zero"。
谁能建议我该怎么做?
怀疑 iTextSharp
将  
放入 PDF。相反,iTextSharp
足够聪明,可以正确地将其识别为不间断的 space。证明如下:
string HTML = @"
<div>
<h1>HTML Encoded non breaking space</h1><table border='1'><tr><td>&#160;</td></tr></table>
<h1>HTML non breaking space</h1><table border='1'><tr><td> </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;
。简单的解决方法是 替换 编码的 HTML 实体 在 它进入解析器之前:
HTML = HTML.Replace("&#160;", "\u00A0");
我正在使用 iTextSharp XMLWorkder class 将 HTML 转换为 PDF。一切正常,除非那里有任何空的 HTML table,它将 " "
字符放入其中,然后在 PDF 中清晰可见。
我试图用空 space 或 <br/>
替换它,但出现错误 "table width must be greater than zero"。
谁能建议我该怎么做?
怀疑 iTextSharp
将  
放入 PDF。相反,iTextSharp
足够聪明,可以正确地将其识别为不间断的 space。证明如下:
string HTML = @"
<div>
<h1>HTML Encoded non breaking space</h1><table border='1'><tr><td>&#160;</td></tr></table>
<h1>HTML non breaking space</h1><table border='1'><tr><td> </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;
。简单的解决方法是 替换 编码的 HTML 实体 在 它进入解析器之前:
HTML = HTML.Replace("&#160;", "\u00A0");