2016-03-08 11 views
1

Я конвертирую HTML в PDF с помощью iTextSharp XMLWorkder. Все работает отлично, за исключением случаев, когда есть какая-либо пустая таблица HTML, она помещает символ " " в то, что видно тогда в PDF.iTextsharp - XmlWorker PDF - & # 160 видны в PDF

Я попытался заменить это пустым пространством или <br/>, но он дал ошибку «ширина таблицы должна быть больше нуля».

Может ли кто-нибудь предложить, что мне делать?

+1

Просто чтобы быть ясно, ''   является HTML вещи, а не PDF вещи. Вы буквально видите эти 6 символов напечатаны или вы видите гигантское пустое пространство? Кроме того, что такое пустая таблица? '

или'
'или'
'или что-то подобное? –

+0

@ChrisHaas - '

' и '
' throw 'System.ArgumentException'. '
' работает, но делает ** не ** помещает ' ' в PDF. Фактически, быстрый глобальный поиск исходного кода XMLWorker (5.5.8) не находит ' ', поэтому, возможно, что-то еще ... – kuujinbo

ответ

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 
      ); 
     } 
    } 
} 

enter image description here

Так что, скорее всего дело в том, что HTML послал анализатору закодировал &#160; в &amp;#160;. Простое исправление для заменить кодированный HTML сущность перед тем он идет анализатор:

HTML = HTML.Replace("&amp;#160;", "\u00A0");