JTidy问题编号列表项

时间:2018-11-11 04:50:56

标签: java itext pdf-generation jtidy numbered-list

在使用IText生成pdf时,我遇到了带编号的列表项的怪异问题。附加<br/>标签时,项目列表的序列号不会增加1。考虑以下示例:

String withoutBrTag = "<html><head></head><body><p>this is order list</p>" +
                "        <br>" +
                "        <ol>" +
                "          <li>lafjad</li>" +
                "          <li>alsdfkjla </li>" +
                "          <li>asdflkjadslfkj</li>" +
                "        </ol>" +
                "        <br>" +
                "        <p>list item ended</p>&nbsp;"+
                "</body></html>";

String wihBrTag = "<html><head></head><body><p>this is order list</p>" +
                "        <br>" +
                "        <ol>" +
                "          <br>" +
                "          <li>lafjad</li>" +
                "          <br>" +
                "          <li>alsdfkjla </li>" +
                "          <br>" +
                "          <li>asdflkjadslfkj</li>" +
                "          <br>" +
                "        </ol>" +
                "        <br>" +
                "        <p>list item ended</p>&nbsp;"+
                "</body></html>";

Tidy tidy = new Tidy();
tidy.setXmlOut(true);
tidy.setQuiet(true);
tidy.setShowWarnings(false);

OutputStream outputStream = new FileOutputStream("test1.pdf");

ByteArrayInputStream inputStream = new ByteArrayInputStream(withBrTag.getBytes());

Document doc = tidy.parseDOM(inputStream, null);
inputStream.close();

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(outputStream);

对于 String withBrTag,输出为:

this is order list

2. list item one
4. list item two
6. list item three

list item ended

请注意编号-2, 4, 6!每个<br/>标签在执行<li>时都被解析为tidy.parseDOM(inputStream, null)节点。因此编号发生变化。 TIDY 以错误的方式解析了html内容,从而导致了编号问题。

但是如果我使用 String withoutBrTag,则生成的输出是预期的。

this is order list

1. list item one
2. list item two
3. list item three

list item ended

任何人都可以解释为什么<br/>标签被视为</li>标签以及如何解决吗?

注1:不仅适用于<br/>标签的编号更改,还适用于任何html标签的标签,例如-<p>, <i>, <hr/>标签。这意味着,如果在<li>标签之前或之后添加任何标签,则会影响编号。

注意2:使用了itextpdf-2.0.1。

0 个答案:

没有答案