1

我在特定情况下使用 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;
                }
}

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

4

2 回答 2

2

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

for loop
dim desc as string

desc="TEST & TEST"

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

s(2)= desc

end of loop

因此,在我的情况下这个问题得到了解决

于 2018-03-14T12:04:43.417 回答
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 和 itextpdf 5.5.12 版本

于 2017-11-24T07:57:52.223 回答