JTidy проблема с номером элемента списка - PullRequest
0 голосов
/ 11 ноября 2018

У меня странная проблема с Нумерованным элементом списка при создании pdf с использованием IText. Серийный номер списка элементов не увеличивается на единицу при добавлении тега <br/>. рассмотрим следующий пример:

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

Для строки 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.

...