2011-12-20 24 views
8

Estoy usando iTextSharp v.4 para combinar un montón de archivos html. Funcionó bien hasta que necesité actualizar a v.5 de iTextSharp.iTextSharp HTMLWorker.ParseToList() arroja NullReferenceException

El problema surge cuando paso un lector de secuencias (que lee el contenido del archivo html) en el método ParseToList del objeto HTMLWorker. Lanza una excepción de referencia nula. Al depurarlo, puedo acceder al streamReader y puedo confirmar que se lee el contenido correcto del archivo.

Aquí está el código:

List<IElement> objects; 
try 
{ 
    objects = HTMLWorker.ParseToList(new StringReader(htmlString), null); 
} 
catch (Exception e) 
{ 
    htmlString = "<html><head></head><body><br/><br/><h2 style='color:#FF0000'>ERROR READING FILE!</h2><h3>File Excluded From Stitched Document!</h3><br/><br/><p>There was an error while trying to read the following file:</p><p><span style='color:#FF0000'>" + fileName + "</span></p></body></html>"; 
    objects = HTMLWorker.ParseToList(new StringReader(htmlString), null); 
} 

En el bloque catch se verá que luego utilizo prácticamente el mismo código para añadir texto al pdf que decir que había un problema. Este código funciona bien. Por supuesto, esto me hace pensar que el problema radica en el contenido de la cadena HTML original, por lo que aquí es el contenido de la cadena, ya que es inmediatamente antes de ser pasado al analizador:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <meta http-equiv="Pragma" content="no-cache" /> 
    <meta http-equiv="cache-control" content="no-cache" /> 
</head> 
<body style="font-family: Arial, Helvetica, sans-serif; font-size: 1em; margin: 0; 
    padding: 0;"> 
    <div style="font-size: 1em; line-height: 1.25em; width: 190mm;"> 
     <h1 style="font-size: 1.5em; font-weight: bold; margin: 0 0 1.5em 0; text-align: center;"> 
      Advice Item 1</h1> 
     <table border="0" style="width: 190mm; border-collapse: collapse; margin: 0 0 1.5em 0; 
      width: 100%;"> 
      <tbody> 
       <tr> 
        <td style="width: 35mm; height: 1px; line-height: 1px; font-size: 1px;"> 
         &nbsp; 
        </td> 
        <td> 
        </td> 
        <td style="width: 30mm; height: 1px; line-height: 1px; font-size: 1px;"> 
         &nbsp; 
        </td> 
        <td> 
        </td> 
       </tr> 
       <tr> 
        <td colspan="4" style="font-weight: bold;"> 
         <span id="litPatchedToCC" style="text-align: right; font-weight: bold;"></span> 
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         By: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         ABC 
        </td> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         From: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         CC 
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Date: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         29/03/2011 13:35 
        </td> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         To: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         Member Practice 
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Folder: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         A15-123456 
        </td> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Individual: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         Miss A B Test 
        </td> 
       </tr> 
       <tr> 
        <td colspan="2"> 
         <hr width="100%" /> 
        </td> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Of: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         Lorem &amp; Ipsum 
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Species: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         Bovine 
        </td> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Position: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
         Member 
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Item Type: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
        </td> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Tel: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
        
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
        </td> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Other Nos: 
        </th> 
        <td style="font-weight: bold; padding: 2px 5px;"> 
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Reason For Call: 
        </th> 
        <td colspan="3" style="font-weight: bold; padding: 2px 5px;"> 
         Some Reason 
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
         Subject: 
        </th> 
        <td colspan="3" style="font-weight: bold; padding: 2px 5px;"> 
         Some problem. 
        </td> 
       </tr> 
       <tr> 
        <th scope="row" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
        </th> 
        <td> 
        </td> 
        <th scope="row" colspan="2" style="text-align: right; font-weight: normal; padding: 2px 5px;"> 
        </th> 
        <td colspan="2"> 
        </td> 
       </tr> 
       <tr> 
        <td style="font-size: 1.5em; font-weight: bold; text-align: center;" colspan="4"> 
         Internal 
        </td> 
       </tr> 
       <tr> 
        <td colspan="4" style="text-align: center; padding: 2px 5px;"> 
         <hr width="100%" /> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
     <div style="padding: 2px 5px;"> 
      <p> 
       Here we start the discussion.</p> 
      <br /> 
      <p> 
       Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> 
      <br /> 
      <p> 
       Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> 
     </div> 
    </div> 
</body> 
</html> 

Gracias por cualquier ayuda. hofnarwillie

Respuesta

8

Parece que HTMLWorker se está ahogando en los dos <hr width="100%" />. Como dijo que va a utilizar V5.XX, también podría ser bueno comenzar a usar XMLWorker para comenzar a analizar su HTML, el equipo de desarrollo lo recomienda. (El último código fuente HTMLWorker incluso tiene una pequeña referencia señalar esto)

probado con su HTML extendido, funciona, y no es demasiado mala para implementar :)

using (Document document = new Document()) { 
    PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream); 
    document.Open(); 
    try { 
    StringReader sr = new StringReader(htmlString); 
    XMLWorkerHelper.GetInstance().ParseXHtml(
     writer, document, sr 
    );   
    } 
    catch (Exception e) { 
    throw; 
    } 
} 

probado en un entorno web , entonces reemplace Response.OutputStream con el Stream de su elección.

+0

Gracias por la respuesta. ¿Dónde se define la clase XMLWorkerHelper? No creo que lo tenga en el dll iTextSharp que descargué. V 5.1.3 – hofnarwillie

+0

lo encontré gracias. Para fines de referencia: http://sourceforge.net/projects/itextsharp/files/xmlworker/xmlworker-1.1.1/itextsharp.xmlworker-all-1.1.1.zip/download – hofnarwillie

+0

acaba de realizar la prueba, se marcará como respuesta cuando finalice – hofnarwillie

Cuestiones relacionadas