Почему счетчик целей сообщает номер последней страницы, а не первой страницы, на которой появляется привязка

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