Рубрики
Без рубрики

Столы ReportLab – создание таблиц в PDFS с Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Вернувшись в марте этого года, я написал простое руководство по ReportLab, удобный 3-й пакет Python Python, который позволяет разработчику программно создавать PDFS. Недавно я получил запрос, чтобы покрыть, как делать таблицы в ReportLab. Поскольку моя статья REPORTLAB настолько популярна, я полагал, что это, вероятно, стоит того, чтобы проблемы выяснить таблицы. В этой статье я попытаюсь показать вам основы вставки таблиц в сгенерированные PDF-файлы ReportLab.

Одним из немногих проблем, которые у меня с ReportLab – это их руководство пользователя. Он показывает несколько хороших примеров, но они почти всегда неполны. Go Скачать руководство пользователя здесь И начните читать главу семь (главу на таблицах), и вы быстро увидите следующий фрагмент кода:

[Python] ( [(«Lineabove», (0,0), (-1,0), 2, цвета. Грин), («Lineabove», (0,1), (-1, -1), 0,25, цвета. Черный классный), («Линейный берег», (0, -1), (-1, -1), 2, цвета. Грин), («Выровнять», (1,1), (-1, -1), «правильно»)] )

Конечно, этот фрагмент совершенно не работает, а текст вокруг его довольно бесполезно, чтобы выяснить, как импортировать Скатерс и Цвета Отказ Похоже, вы можете получить все настольные материалы из текучего класса (PG 76 – первая страница главы 7). К сожалению, нет «ReportLab.flowable». Вы должны знать, что все стойки приходят из чего называется утконос Отказ Давайте остановимся здесь и поговорим о том, что является «текучем». Вот что говорит руководство пользователя:

Flowables – это то, что можно нарисовать, и которые имеют обертывание, рисовать и, возможно, разделенные методы. Flowbable – это абстрактный базовый класс для вещей, которые будут нарисованы, и экземпляр знают его размер и рисует в собственной системе координат (для этого требуется базовая API для обеспечения абсолютной системы координат, когда требуется метод Flowbable.draw). Чтобы получить экземпляр использования (). (PG 62, Раздел 5.3). Обратите внимание, что нигде на этой странице он показывает, как получить текучий класс. Я только узнал, как, сделав текст поиска их источника. Вот синтаксис: от ReportLab.platypus Импорт полезен

Это такая вещь, которая заставила меня почти отказаться от использования ReportLab вообще несколько лет назад. К счастью, мой босс заставил меня понять это и имел некоторые реальные примеры для меня. Хорошо, достаточно ринт. На с таблицами учебника!

Начало работы с таблицами ReportLab

Мы на самом деле собираемся принять некоторые примеры таблицы из Руководства пользователя REPORTLAB и сделать их Runnable. Я постараюсь объяснить, что происходит в коде, но вы можете также обратиться к руководству. Начнем с примера на PG 78 под названием Форматирование клеток TableStyle Отказ Этот первый реальный пример показывает, как создать таблицу с несколькими цветами, но без видимой сетки. Давайте сделаем это Runnable!

[Python] от ReportLab.Lib Цвета импорта от ReportLab.lib.pageizesizes Импорт от ReportLab.platypus Импорт SimpledoCteMplate, таблица, скатерс

DOC («SICE_TABLE.PDF»,) # контейнер для элементов объектов «FLAYBAUS» = []

данные = [[’00’, ’01’, ’02’, ’03’, ’04’], [’10’, ’11’, ’12’, ’13’, ’14’], [’20 ‘, «21», «22», «23», «24»], [«30», «31», «32», «33», «34»]] (Data) T. SotStStyle (TableStyle ( [(«Фон», (1,1), (- 2, -2), Цвета. Грин), («TextColor», (0,0), (1 ,1), COLORS.RED)])) elements.append (t) # Написать документ на диск DOC.BUILD (Элементы)

Если вы запустите этот код, вы должны увидеть что-то вроде этого, сосредоточенное вдоль вершины вашего PDF:

Если вы посмотрите на код, вы заметите, что у нас есть ряд импорта. Мы импортируем Цвета От “ReportLab.lib”, Письмо от «ReportLab.lib.pagesizes» и SimpledoCteMplate , Таблица и Скатерс от “ReportLab.platypus”. Импорт довольно неясно, но они также помогают нам ознакомиться с тем, как выложены код ReportLab. Если нам нужны другие стойки, такие как абзац, мы, вероятно, можем предположить, что он придет от «ReportLab.platypus», поскольку таблица является текучем. Если вы попробуете его, вы увидите, что это предположение верно.

Далее мы создаем шаблон документа, используя SimpledoCteMplate класс. Первый аргумент – это путь к PDF, который мы хотим создавать, и второй аргумент – это размер страницы. В этом примере мы просто помещаем имя документа. Это приведет к тому, что скрипт поставил PDF в той же папке, от которой он бежит. По причинам, по которым я никогда не видел, объяснил, вы используете список для хранения стоков. В этом коде мы называем наш список «элементы». В руководстве пользователя они называют это «историей».

данные Список содержит данные, которые пойдут в нашем столе. Список представляет собой список списков. Стол будет 5 столбцов шириной (длина вложенных списков) и 4 ряда высоты (количество вложенных списков). Передаем этот список в нашу Таблица Класс, чтобы создать таблицу в памяти, а затем позвоните на нашем методе setStyle экземпляра в таблице, чтобы изменить стиль. Для этого мы передаем это Скатерс Класс, который содержит стили, которые мы хотим подать заявку. В этом случае мы хотим применить зеленый цвет фона из клеток в столбце 2, строки 2 к столбцу 3, строку 2. Обратите внимание, что столбцы и строки находятся на нуле, поэтому, и т. Д. Также отметьте, что пример использует ( -2, -2), а не гораздо проще понять (3, 2). Это иллюстрирует, что вы также можете указать настройки из нижнего правого угла вместо того, чтобы просто делать все сверху слева. К сожалению, система координат, начиная с нижнего правого, начинается с (-1, -1), и это делает его немного сложнее, чтобы привлечь свой разум.

Затем мы устанавливаем цвет текста красным в первых двух столбцах. Я признаю, что я не совсем уверен, как это работает как координаты окончания, просто не подходят с теми, что для фона цвета. Я оставлю это моим читателям, чтобы объяснить.

Наконец, мы добавляем таблицу в список наших элементов, а затем позвоните нашему экземпляру документа построить Способ с списком элементов как его единственный аргумент. Это приводит к тому, что документ будет создан и создан PDF. Теперь у вас есть таблица PDF!

Добавление сетки к столу

Давайте возьмем следующий пример из документации по ReportLab и посмотрим, сможем ли мы получить его тоже. Этот следующий пример показывает, как добавить видимую сетку в таблицу, а также как расположить текст в ячейках.

[Python] от ReportLab.Lib Цвета импорта От regramblab.lib.pageiesizesize Metter, дюйм от ReportLab.platypus Импорт SimpledoCteMplate, таблица, скатерс

DOC («SICE_TABLE_GRID.PDF»,) # контейнер для элементов объектов «FLUE» = []

данные = [[’00’, ’01’, ’02’, ’03’, ’04’], [’10’, ’11’, ’12’, ’13’, ’14’], [’20 ‘, «21», «22», «23», «24»], [«30», «31», «32», «33», «34»]] (данные, 5 * [0,4 * дюйма ], 4 * [0,4 * дюйма]) T.SetStyle (TableStyle ([(«ALIGN», (1,1), (- 2, -2), «Право»), («TextColor», (1,1 ), (- 2, -2), цвета.ред), (‘valign’, (0,0), (0 ,1), ‘top’), (“TextColor ‘, (0,0) ( 0, -1), COOTOR.BLUE), («ALIGN», (0, -1), (- 1, -1), «Центр»), (‘Valign’, (0, -1), (- 1, -1), «середина»), («TextColor», (0, -1), (- 1, -1), цвета. Грин), («Innergrid», (0,0), (-1 , -1), 0,25, Цвета. Черный класс), (‘box’, (0,0), (-1, -1), 0.25, Colors.black),]))

elements.append (t) # Написать документ на диск DOC.BUILD (Элементы)

У нас есть один новый импорт здесь из страницы Библиотека: дюйма Отказ «Дюйм» просто дает нам простой способ установить размеры или маржи в нашем PDF. В этом случае мы используем его, чтобы установить ширину столбцов таблицы и высоты строки. Следующее изменение в SetStyle Раздел кода, и это действительно ключ для получения таблиц, чтобы посмотреть, как вы хотите. Скатерс Класс полностью контролирует внешний вид таблицы. Например, первые две строки выровняют среднюю шесть клеток справа и окрасите их красным. Следующие две линии установили четыре ячейки в первом столбце к синему цвету и к тексту к верхней части ячейки. Вы можете выяснить три строки самостоятельно.

Последние две строки кода нарисуют внутреннюю решетку и коробку вокруг сетки. Затем мы добавляем таблицу в список наших элементов и, наконец, построить документ.

Создание сложных значений клетки

Последний главный пример, который мы собираемся посмотреть, – это комплексные значения ячейки Пример из Руководства пользователя ReportLab. Этот показывает, что вставляет другие потоки ReportLab в самих ячейках. Давайте посмотрим!

[Python] от ReportLab.Lib Цвета импорта От regramblab.lib.pageiesizesize Metter, дюйм от ReportLab.platypus Import Import, абзац, SimpleDoCteMate, таблица от ReportLab.lib.styles Импорт getsamplestylesheet

DOC («Complex_Cell_values.pdf»,) # контейнер для элементов объектов «FLAYBABUS» = []

stylesheet ()

Я (‘reflogo.gif’) .25 * дюймовый * i.drawheight/i.drawidth .25 * дюймовый (” ‘ PA R A График 1 ‘ ” ‘, stylesheet [“bodytext”]) (” ‘ ReportLab покинул logo Image ‘ ”, stylesheet [“bodytext”]) данные = [[‘A’, ‘B’, ‘C’, P0, ‘D’], [’00’, ’01’, ’02’, [I, p], ’04’], [’10’, ’11’, ’12’, [p, i], ’14’], [«20», «21», «22», «23», «24»], [«30», «31», «32», «33», «34»]]

T = таблица (данные, стиль = [(‘GRID », (1,1), (- 2, -2), 1, COOVER.green), (« Box », (0,0), (1, – 1), 2, цвета .ed), («Lineabove», (1,2), (- 2,2), 1, Colors.Blue), (‘linebefore’, (2,1), (2, – 2), 1, Colours.Pink), («Фон», (0, 0), (0, 1), COLES.PINK), («Фон», (1, 1), (1, 2), Цвета .Lavender), («Фон», (2, 2), (2, 3), COLECTS.ORANGE), («BOX», (0,0), (- 1, -1), 2, COLORS.BLACK ), («Сетка», (0,0), (- 1, -1), 0,5, цвета. Черная), (‘Valign’, (3,0), (3,0), «Нижние»), («Фон», (3,0), (3,0), Цвета.limegreen), («Фон», (3,1), (3,1), Цвета.Хаки), («Создание», ( 3,1), (3,1), «Центр»), («Фон», (3,2), (3,2), Цвета. Fbeige), («Создание», (3,2), ( 3,2), «слева»),]) .5 * дюйм

elements.append (t) # Написать документ на диск DOC.BUILD (Элементы)

Этот фрагмент имеет пару новых импорта. Во-первых, нам нужен доступ к Изображение и Пункт , которые являются частью утконос либлировать Мы также должны быть в состоянии использовать getsamplestyleshehet Итак, мы импортируем это из Стили либлировать Пункты являются Flowsable, которые позволяют использовать HTML-подобный синтаксис для стиля нашего текста и вставки изображений, хотя мы не выполняем вставку изображений в этом конкретном примере.

Во всяком случае, еще раз, стиль – это то, где действие. В этом примере мы проводим ярлык и передаем стиль прямо в объект таблицы, используя его Стиль Параметр вместо использования метода «SetStyle» таблицы в сочетании с классом Tablestyle. Результат был бы одинаковым, если бы мы сделали это так, хотя. Вы должны быть в состоянии разобрать стиль самостоятельно в этот момент. Единственная реальная разница состояла в том, где мы добавили экземпляры абзаца и изображения в список данных.

Другие шансы и цели

Есть лишь несколько других, чтобы упомянуть о таблицах, которые не подходили с предыдущими примерами. REPORTLAB обеспечивает возможность разделения таблиц, когда на странице слишком много строк. Это включено по умолчанию. Согласно документации, нет возможности разделить на столбце в настоящее время, так что не пытайтесь пытаться вставить дополнительный столбец.

Таблица также имеет repuretrows и Покраски Параметры. Параметр RuipeRows контролирует, сколько строк повторяется в разделе. Параметр RepuretCols в настоящее время не реализован. Если честно, я даже не уверен, почему этот параметр даже включен. Это было там довольно долго, и это все еще ничего не делает.

Обертывание

Теперь у вас должна быть хорошая основа для создания таблиц PDF, используя Toolkit ReportLab. Эта статья просто царапает поверхность того, что может сделать REPORTLAB, поэтому обязательно прочитайте документацию, тесты и различные другие примеры на своем веб-сайте, чтобы действительно понять мощность в этом удобном инструменте.

Дальнейшее чтение

Загрузки

  • reportlab_tables.zip
  • ReportLab_table.tar.tar.tar.tar