#itext #html2pdf
Вопрос:
У нас есть случай, когда содержимое внутри div с заданным якорем/идентификатором распространяется по разным страницам.
При получении номера страницы с помощью css используйте это с помощью определенного стиля
content: target-counter(attr(href), page);
Он преобразуется в последний номер страницы, на которую распространяется содержимое, в то время как, например, при создании оглавления вы ожидаете, что это будет 1-я страница, на которой находится указанная цель.
Проведение некоторых исследований указывает нам на следующий метод, в котором все идет не так: com.itextpdf.layout.renderer.TargetCounterHandler.addPageByID(продавец)
Последующие страницы для данного идентификатора страницы перезаписывают отслеживаемый номер страницы, который затем используется логикой для последующего добавления его в содержимое.
Ответ №1:
Мы применили следующее исправление, чтобы проверить наши предположения, что заставляет его работать, но желательно, чтобы было доступно лучшее решение?
public static void addPageByID(IRenderer renderer) {
final String id = renderer.<String>getProperty(Property.ID);
if (id != null) {
final TargetCounterHandler targetCounterHandler = getTargetCounterHandler(renderer);
if (targetCounterHandler != null amp;amp; renderer.getOccupiedArea() != null) {
final int currentPageNumber = renderer.getOccupiedArea().getPageNumber();
// Make sure to track the 1st occurrence of the page
// otherwise we create page references in TOCs to the last one who passed by here
Integer storedPageNumber = targetCounterHandler.renderersPages.get(id);
if(storedPageNumber==null || storedPageNumber>currentPageNumber) {
targetCounterHandler.renderersPages.put(id, currentPageNumber);
}
}
}
}