IndexError: записи индекса не разрешаются после 10 проходов - PullRequest
0 голосов
/ 07 апреля 2020

Я использую модуль reportlab для создания PDF-документа. У меня есть пользовательский класс PdfDocument, который расширяет SimpleDocTemplate. Я пытаюсь создать оглавление, используя технику, описанную в официальной документации. А именно, переопределяя метод afterFlowable. Вот фрагмент кода:

class PdfDocument(SimpleDocTemplate):
    def __init__(self, filename, **kwargs):
        SimpleDocTemplate.__init__(self, filename, **kwargs)
        self.filename = filename
        self._contents = []
        self._toc = TableOfContents()

    def afterFlowable(self, flowable):
        if isinstance(flowable, SubChapter):
            self.notify('TOCEntry', (1, flowable.title, self.page))
        elif isinstance(flowable, Chapter):
            self.notify('TOCEntry', (0, flowable.title, self.page))

    def multiBuild(self, on_first_page=_do_nothing, on_later_pages=_do_nothing):
        self.insert_content(0, self._toc)
        SimpleDocTemplate.multiBuild(self, self._contents, onFirstPage=on_first_page, onLaterPages=on_later_pages)

Как вы можете видеть, я также переопределяю метод multiBuild(), поскольку оглавление требует нескольких проходов для генерации. У меня также есть два пользовательских текучих класса - Chapter и SubChapter. Итак, в основном я хочу сгенерировать TOCEntry для каждого потока, который имеет тип Chapter или SubChapter. Однако, когда вызывается метод multiBuild(), через некоторое время я получаю следующую ошибку:

File "build\bdist.win32\egg\reportlab\platypus\doctemplate.py", line 1156, in multiBuild
IndexError: Index entries not resolved after 10 passes

В чем может быть причина этого и как я могу решить эту проблему?

...