Я использую модуль 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
В чем может быть причина этого и как я могу решить эту проблему?