2015-02-27 3 views
0

У меня есть основной .vm файл, который я заселить с XML, а затем использовать IText, чтобы преобразовать его в PDF документ:IText анализатор исключение для XML - преобразования> PDF

<?xml version="1.0" encoding="UTF-8"?> 
<!--<!DOCTYPE itext SYSTEM "http://itext.sourceforge.net/itext.dtd">--> 
<itext creationdate='${System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")}' producer="X"> 
    <paragraph align="Default" size="18.0" style="bold" indentationleft="0.0"> 
    Test 
    </paragraph> 
</itext> 

выше разбирается абсолютно нормально , Однако что-то немного сложнее:

<?xml version="1.0" encoding="UTF-8"?> 
<!--<!DOCTYPE itext SYSTEM "http://itext.sourceforge.net/itext.dtd">--> 
<itext creationdate='${System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")}' producer="X"> 
    <paragraph align="Default" size="18.0" style="bold" indentationleft="0.0"> 
    Test 
    </paragraph> 
    <table> 
    <row> 
     <cell> 
     <paragraph> 
      Table test 
     </paragraph> 
     </cell> 
    </row> 
    </table> 
</itext> 

сбой с исключением «Невозможно привести объект типа„iTextSharp.text.Paragraph“к типу„iTextSharp.text.Table“.»

Любые идеи? Конечно, я не вижу никаких проблем с форматированием.

ответ

1

Во-первых, если вы используете XML в PDF, используя iText DTD, то вы используете очень старую и устаревшую серию iTextSharp 4.x с 2008/2009 года. В этой версии было много ошибок, исправленных в серии 5.x. Если вы используете эту версию из-за лицензии, я рекомендовал бы вам (и вашим законным представителям) прочитать четвертый блок на заголовке iText Sales FAQ. Почему я не должен использовать iText 2.x (или iTextSharp 4.x)?.

Второй, но связанный с первым, есть современный способ выполнения XML в PDF. Прочитайте through this answer, в котором содержится гораздо больше деталей и есть ссылки от автора iText, объясняющего, почему вы больше не должны использовать DTD.

Наконец, если вы все еще собираетесь использовать метод DTD, некоторые люди говорят, что вы можете разместить <ignore/> тег между закрытием </paragraph> и открытием <table> тегом, который анализатором IText, чтобы пропустить пробела, которая является известной проблемой. This post также говорит о способе использования XmlTextReader для анализа XML. И, наконец, вы можете просто попробовать удалить все пробелы между XML-тегами, чтобы узнать, исправляет ли это что-то.

Смежные вопросы