Использование Python ReportLab splitfirst/splitlast

7
задан DLJessup 16 September 2008 в 23:52
поделиться

3 ответа

Ну, выглядит, как будто я буду отвечать на свой собственный вопрос.

Во-первых, документация утончаются, находится, где она читает "В любом стиле, управляют, чтобы первый индекс строки мог быть установлен на одну из специальных строк 'splitlast' или 'splitfirst', чтобы указать, что стиль должен использоваться только для последней строки таблицы разделения или первой строки продолжения". В текущем выпуске "splitlast" и "splitfirst" индексы строки порывают с вышеупомянутым TypeErrors на ЦВЕТЕ ТЕКСТА, и ФОН рекомендует.

Мое подозрение, на основе чтения исходного кода, то, что только tablestyle команды строки (СЕТКА, ПОЛЕ, LINEABOVE и LINEBELOW) в настоящее время совместимы с 'splitfirst' и 'splitlast' индексами строки. Я подозреваю, что все команды ячейки порывают с вышеупомянутым TypeErrors.

Однако я смог сделать что я разыскиваемый разделением на подклассы класса Таблицы и переопределением onSplit метода. Вот мой код:

class XTable(Table):
    def onSplit(self, T, byRow=1):
        T.setStyle(TableStyle([
          ('TEXTCOLOR', (0, 1), (1, 1), colors.black)]))

То, что это делает, применяют цвет текста, черный к первой и второй ячейке второй строки каждой страницы. (Первая строка является заголовком, повторенным repeatRows параметром Таблицы.) Более точно, это делает это к первой и второй ячейке каждого кадра, но так как я использую SimpleDocTemplate, кадры и страницы идентичны.

3
ответ дан 7 December 2019 в 14:39
поделиться

[...] В любом стиле управляют, чтобы первый индекс строки мог быть установлен на одну из специальных строк [...]

В Вашем первом примере Вы устанавливаете второй индекс строки на специальную строку также.

Не уверенный, почему другие два не работают... Вы уверены, что это - то, куда исключение прибывает из?

0
ответ дан 7 December 2019 в 14:39
поделиться

Похоже, это ошибка в классе ReportLab Table. Еще одно исправление для этого в дополнение к собственному ответу DLJessup - это изменение кода ReportLab, вызывающего ошибку, в Table._drawBkgrnd () , около строки 1301. Для 'splitlast' измените :

y0 = rowpositions[sr]

to:

if sr == 'splitlast':
    y0 = rowpositions[-2] # last value is 0.  Second last is the one we want.
else:
   y0 = rowpositions[sr]

Это легко сделать в вашем собственном коде без взлома ReportLab путем создания подкласса Table и перезаписи этого метода. Мне не приходилось использовать «splitfirst»; если я это сделаю, я опубликую здесь остальную часть хака.

1
ответ дан 7 December 2019 в 14:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: