Создание сложного PDF
Пример Hello, World показал простые шаги по созданию PDF-документа с использованием Python и Aspose.PDF. В этой статье мы рассмотрим создание более сложного документа с использованием Aspose.PDF для Python. В качестве примера мы возьмем документ от вымышленной компании, которая занимается пассажирскими паромными перевозками. Наш документ будет содержать изображение, два текстовых фрагмента (заголовок и абзац) и таблицу.
Если мы создаем документ с нуля, нам нужно следовать определенным шагам:
-
Создайте объект Document. На этом шаге мы создадим пустой PDF-документ с некоторыми метаданными, но без страниц.
-
Добавьте Page к объекту документа. Теперь у нашего документа будет одна страница.
-
Добавьте Image на страницу.
-
Создайте TextFragment для заголовка. Для заголовка мы будем использовать шрифт Arial с размером 24pt и выравниванием по центру.
-
Добавьте заголовок в paragraphs страницы.
-
Создайте TextFragment для описания. Для описания мы будем использовать шрифт Arial с размером 24pt и выравниванием по центру.
-
Добавьте (описание) в Paragraphs страницы.
-
Создайте таблицу, добавьте свойства таблицы.
-
Добавить (таблицу) на страницу параграфы.
-
Сохранить документ “Complex.pdf”.
import aspose.pdf as ap
# Инициализация объекта документа
document = ap.Document()
# Добавить страницу
page = document.pages.add()
# Добавить изображение
page.add_image(image_file, ap.Rectangle(20, 730, 120, 830, True))
# Добавить заголовок
header = ap.text.TextFragment("Новые маршруты паромов осенью 2020")
header.text_state.font = ap.text.FontRepository.find_font("Arial")
header.text_state.font_size = 24
header.horizontal_alignment = ap.HorizontalAlignment.CENTER
header.position = ap.text.Position(130, 720)
page.paragraphs.add(header)
# Добавить описание
descriptionText = "Посетители должны покупать билеты онлайн, и количество билетов ограничено до 5,000 в день. \
Паромное сообщение работает на половину мощности и по сокращенному графику. Ожидайте очереди."
description = ap.text.TextFragment(descriptionText)
description.text_state.font = ap.text.FontRepository.find_font("Times New Roman")
description.text_state.font_size = 14
description.horizontal_alignment = ap.HorizontalAlignment.LEFT
page.paragraphs.add(description)
# Добавить таблицу
table = ap.Table()
table.column_widths = "200"
table.border = ap.BorderInfo(ap.BorderSide.BOX, 1.0, ap.Color.dark_slate_gray)
table.default_cell_border = ap.BorderInfo(ap.BorderSide.BOX, 0.5, ap.Color.black)
table.default_cell_padding = ap.MarginInfo(4.5, 4.5, 4.5, 4.5)
table.margin.bottom = 10
table.default_cell_text_state.font = ap.text.FontRepository.find_font("Helvetica")
headerRow = table.rows.add()
headerRow.cells.add("Отправляется из города")
headerRow.cells.add("Отправляется с острова")
i = 0
while i < headerRow.cells.count:
headerRow.cells[i].background_color = ap.Color.gray
headerRow.cells[i].default_cell_text_state.foreground_color = ap.Color.white_smoke
i += 1
time = timedelta(hours=6, minutes=0)
incTime = timedelta(hours=0, minutes=30)
i = 0
while i < 10:
dataRow = table.rows.add()
dataRow.cells.add(str(time))
time = time.__add__(incTime)
dataRow.cells.add(str(time))
i += 1
page.paragraphs.add(table)
document.save(output_pdf)