2017-04-13 5 views
0

iTextとXMLWorkerHelperを使用して問題が発生しています。私は問題のない複数のページで複数のPDFファイルを生成しますが、特殊文字でエラーが発生することがあります。特別な文字列でiTextを使用してHTMLをPDFに変換する

私は私のテンプレートをテストし、それは例外と言っていても、私のHTMLに問題はありません。

Exception thrown: 'iTextSharp.tool.xml.exceptions.RuntimeWorkerException' in itextsharp.xmlworker.dll 

Additional information: Invalid nested tag tr found, expected closing tag td. 

このエラーは、文字によるものです:&私のテンプレートに追加されます。

<td>Launch C&O</td> 

このエラーを解決する方法は正確にはわかりませんが、エンコードエラーですか? PDFを作成するときにエンコードモードを指定する必要がありますか?

これは、PDFを作成するコードです:

public async Task Generate(Stream stream, List<string> contentPages) 
     { 
       try 
       { 
        int cpt = 1; 
        Document document = new Document(); 
        PdfWriter writer = PdfWriter.GetInstance(document, stream); 
        writer.CloseStream = false; 
        document.Open(); 

        foreach (string pdfContentPage in contentPages) 
        { 
         try 
         { 
          document.NewPage(); 
          using (StringReader srHtml = new StringReader(pdfContentPage)) 
          { 
           XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, srHtml); 
          } 
          ++cpt; 
         } 
         catch (RuntimeWorkerException ex) 
         { 
          Console.Write($"An error occured at PDF generation for cpt = {cpt}"); 
          Console.Write(ex.Message); 
         } 
         catch (Exception) 
         { 
          Console.WriteLine($"Content Error : pdfContentPage}"); 
          throw; 
         } 
        } 

        document.Close(); 
       } 
       catch (Exception) 
       { 
        throw; 
       } 
} 

あなたはアドバイスを持っている場合、私はそれを読んでくれてうれしいです! :)

+2

の下で試してみて、何が起こるかを参照してください。 –

+0

これは何も変更していません。目的のためにありがとうございます:) –

+0

https://validator.w3.org/checkのW3CバリデーターでHTMLを実行し、HTML-Tidy *でマークアップをチェックしてください。元のHTMLと比較する。ページの下部にあるクリーンなHTMLでもう一度試してください。 * JTidy *を使用して、独自のコードでこれを自動化することができます。 –

答えて

0

は `&` `&と`置き換えロジックと

InputStream is = new ByteArrayInputStream(srHtml.getBytes(Charset.forName("UTF-8"))); 
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, is, Charset.forName("UTF-8")); 

、xmlworker 5.5.12および5.5.12 itextpdfバージョン

+0

問題のコメントに既に記載されているように、この問題は無効なXMLによって引き起こされました。あなたのコードは役に立たなかったでしょう。 – mkl

関連する問題