【问题标题】:Convert HTML to PDF using iText with special char fail使用带有特殊字符的 iText 将 HTML 转换为 PDF 失败
【发布时间】:2017-09-09 13:41:45
【问题描述】:

在特定情况下使用 iText 和 XMLWorkerHelper 时遇到问题。我生成多个包含多个页面的 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;
                }
}

如果您有建议,我很高兴阅读! :)

【问题讨论】:

  • &amp;amp;替换&amp;,看看会发生什么。
  • 它没有改变任何东西,谢谢你的目的:)
  • 通过validator.w3.org/check 上的 W3C 验证器运行您的 HTML 并检查 使用 HTML-Tidy 清理标记。与您的原始 HTML 进行比较。使用页面底部的已清理 HTML 重试。您可以使用 JTidy 在您自己的代码中自动执行此操作。
  • 我只是通过使用 new System.Xml.Linq.XText(myString).ToString() 来发现一个解决方案(或部分解决方案),我需要添加到我的模板中。跨度>
  • 非常奇怪的错误描述。我一直在寻找这个问题很多天。谢天谢地,在这篇文章中找到了实际的问题和解决方案。我已经通过像这样替换 & 字符来解决它:string htmlText = templateHTML.Replace("&amp;", "&amp;amp;");

标签: c# pdf itext xmlworker


【解决方案1】:

在 & 符号所在的查询绑定字段中,我对所有描述使用了替换功能,例如在绑定 grid s(2)=" TEST &amp; TEST"

for loop
dim desc as string

desc="TEST & TEST"

desc=desc.replace("&"," ")

s(2)= desc

end of loop

这样,我的问题就解决了

【讨论】:

    【解决方案2】:

    试试下面的逻辑

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

    xmlworker 5.5.12 和 itextpdf 5.5.12 版本

    【讨论】:

    • 在问题的cmets中已经发现,问题是由无效的XML引起的;你的代码不会有帮助。
    猜你喜欢
    • 2012-11-05
    • 2018-06-05
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多