2011-12-20 7 views
8

iTextSharp v.4を使用してhtmlファイルを一括してマージします。 iTextSharpのv.5にアップグレードする必要があるまで、うまくいきました。iTextSharp HTMLWorker.ParseToList()はNullReferenceExceptionをスローします

HTMLWorkerオブジェクトのParseToListメソッドにストリームリーダー(HTMLファイルの内容を読み込む)を渡すと問題が発生します。 null参照例外がスローされます。それをデバッグすると、私はstreamReaderにアクセスでき、ファイルの正しい内容が読み取られることを確認できます。あなたは、私は、問題があったことを言ってPDFにテキストを追加することは実質的に同じコードを使用していることがわかりますcatchブロックで

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

:ここ

はコードです。このコードは正常に動作します。任意の助け

<!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> 

ありがとう:もちろん、これは私が問題ので、ここで、元のHTML文字列の内容であり、それはパーサに渡される直前であるとして、文字列の内容だと思います。 hofnarwillie

答えて

8

のようにHTMLWorkerが窒息しているようです。あなたがV5.XXに挑戦していると言ったので、XMLWorkerを使用してHTMLの解析を開始するとよいかもしれません - 開発チームが推奨しています。

あなたの拡張HTMLでテスト

を(最新HTMLWorkerソースコードもこれを指摘小さな参照を持っている)、それが動作し、実装するのも悪くないです:)

ウェブ環境でテスト
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; 
    } 
} 

Response.OutputStreamの代わりにStreamを使用してください。

+0

お返事ありがとうございます。 XMLWorkerHelperクラスはどこに定義されていますか?私はダウンロードしたiTextSharpのDLLにそれがあるとは思わない。 V 5.1.3 – hofnarwillie

+0

ありがとうございました。参考のためhttp://sourceforge.net/projects/itextsharp/files/xmlworker/xmlworker-1.1.1/itextsharp.xmlworker-all-1.1.1.zip/download – hofnarwillie

+0

テストするだけで、完了時に回答となります – hofnarwillie

関連する問題