Использование FloatingBox для размещения текста PDF в Python
Основы использования инструмента FloatingBox
FloatingBox инструмент является специализированным контейнером для размещения текста и другого контента на странице PDF. Его главная особенность — обрезка текста, когда содержимое превышает границы коробки. Создайте и добавьте FloatingBox к a Document используя Aspose.PDF для Python. A FloatingBox служит перемещаемым текстовым контейнером, предоставляя больший контроль над позиционированием макета, границами и стилизацией по сравнению с обычными текстовыми абзацами.
- Создайте новый
Document. - Добавьте
Pageв документ. - Создайте
FloatingBox. - Установите границу коробки с помощью
BorderInfoиBorderSide. - Повторение контрольного окна с
is_need_repeatingсвойство. - Добавьте текстовое содержимое с помощью
TextFragment. - Добавьте
FloatingBoxкPage. - Сохраните окончательный PDF документ, используя
Document.save().
import sys
import aspose.pdf as ap
from os import path
def create_and_add_floating_box(outfile):
# Create PDF document
with ap.Document() as document:
# Add page to pages collection of PDF
page = document.pages.add()
# Create and fill box
box = ap.FloatingBox(400, 30)
box.border = ap.BorderInfo(ap.BorderSide.ALL, 1.5, ap.Color.dark_green)
box.is_need_repeating = False
phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi."
box.paragraphs.add(ap.text.TextFragment(phrase))
# Add box
page.paragraphs.add(box)
document.save(outfile)
В приведённом выше примере мы создаём FloatingBox шириной 400 pt и высотой 30 pt. Кроме того, в этом примере было намеренно создано больше текста, чем могло поместиться в заданный размер. В результате текст был обрезан.

Свойство is_need_repeating с False значение ограничивает текст одной страницей.
Если установить это свойство в True Текст будет переходить на последующие страницы в том же положении.

Расширенные функции FloatingBox
Поддержка многоколоночного режима
Многоколоночный макет (простой случай)
FloatingBox поддерживает многоколоночный макет. Чтобы создать такой макет, вы должны определить значения ColumnInfo свойства.
column_widthsэто строка с перечислением ширины в pt.column_spacingэто строка с шириной промежутка между столбцами.column_countявляется числом столбцов.
import sys
import aspose.pdf as ap
from os import path
def multi_column_layout(outfile):
# Create PDF document
with ap.Document() as document:
# Add page to pages collection of PDF
page = document.pages.add()
# Set margin settings
page.page_info.margin = ap.MarginInfo(36, 18, 36, 18)
column_count = 3
spacing = 10
width = (
page.page_info.width
- page.page_info.margin.left
- page.page_info.margin.right
- (column_count - 1) * spacing
)
column_width = width / 3
# Create FloatingBox
box = ap.FloatingBox()
box.is_need_repeating = True
box.column_info.column_widths = f"{column_width} {column_width} {column_width}"
box.column_info.column_spacing = f"{spacing}"
box.column_info.column_count = 3
phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi."
paragraphs = [
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
]
for paragraph in paragraphs:
box.paragraphs.add(ap.text.TextFragment(paragraph))
# Add a box to a page
page.paragraphs.add(box)
# Save PDF document
document.save(outfile)
Мы использовали дополнительную библиотеку LoremNET в приведённом выше примере и создали 20 абзацев. Эти абзацы были разделены на три колонки и заполнили последующие страницы, пока не закончился текст.
Многоколоночный макет с принудительным началом колонки
Мы сделаем то же самое с следующим примером, как и с предыдущим. Разница в том, что мы создали 3 абзаца. Мы можем заставить FloatingBox отображать каждый абзац в новой колонке. Для этого нам нужно установить is_first_paragraph_in_column когда мы добавляем текст в объект FloatingBox.
import sys
import aspose.pdf as ap
from os import path
def multi_column_layout_2(outfile):
# Create PDF document
with ap.Document() as document:
# Add page to pages collection of PDF
page = document.pages.add()
# Set margin settings
page.page_info.margin = ap.MarginInfo(36, 18, 36, 18)
column_count = 3
spacing = 10
width = (
page.page_info.width
- page.page_info.margin.left
- page.page_info.margin.right
- (column_count - 1) * spacing
)
column_width = width / 3
# Create FloatingBox
box = ap.FloatingBox()
box.is_need_repeating = True
box.column_info.column_widths = f"{column_width} {column_width} {column_width}"
box.column_info.column_spacing = f"{spacing}"
box.column_info.column_count = 3
phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi."
paragraphs = [
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
phrase,
]
for paragraph in paragraphs:
text = ap.text.TextFragment(paragraph)
text.is_first_paragraph_in_column = True
box.paragraphs.add(text)
# Add a box to a page
page.paragraphs.add(box)
# Save PDF document
document.save(outfile)
Поддержка фона
Применить цвет фона к FloatingBox в PDF‑документе, используя Aspose.PDF for Python via .NET.
А FloatingBox является контейнером для текста или других элементов, и при назначении Color используя цвет фона, вы можете визуально выделить содержимое — это полезно для заголовков, выделений или оформленных разделов.
Этот фрагмент кода показывает, как создать простой светло‑зелёный текстовый блок с примерным содержимым.
import sys
import aspose.pdf as ap
from os import path
def background_support(outfile):
# Create PDF document
with ap.Document() as document:
# Add page to pages collection of PDF
page = document.pages.add()
# Create and fill box
box = ap.FloatingBox(400, 30)
box.background_color = ap.Color.light_green
box.is_need_repeating = False
box.paragraphs.add(ap.text.TextFragment("text example"))
# Add box
page.paragraphs.add(box)
# Save PDF document
document.save(outfile)
Поддержка позиционирования
Местоположение FloatingBox на сгенерированной странице определяется positioning_mode, left, top свойства.
Когда positioning_mode значение равно
ParagraphPositioningMode.DEFAULT(значение по умолчанию)
Расположение определяется ранее размещёнными элементами; добавление элемента влияет на расположение последующих элементов. Если Left или Top не нулевые, они тоже учитываются, но комбинированная логика может быть неочевидна.
Местоположение указывается Left и Top значения; они не зависят от предыдущих элементов и не влияют на расположение последующих.
import sys
import aspose.pdf as ap
from os import path
def offset_support(outfile):
# Create PDF document
with ap.Document() as document:
# Add page to pages collection of PDF
page = document.pages.add()
# Create and fill box
box = ap.FloatingBox(400, 30)
box.top = 45
box.left = 15
box.positioning_mode = ap.ParagraphPositioningMode.ABSOLUTE
box.border = ap.BorderInfo(ap.BorderSide.ALL, 1.5, ap.Color.dark_green)
box.paragraphs.add(ap.text.TextFragment("text example 1"))
page.paragraphs.add(ap.text.TextFragment("text example 2"))
# Add the box to the page
page.paragraphs.add(box)
page.paragraphs.add(ap.text.TextFragment("text example 3"))
document.save(outfile)
Выровнять плавающие блоки с вертикальным и горизонтальным выравниванием в PDF
Выровнять FloatingBox элементы внутри страницы PDF, используя разные VerticalAlignment и HorizontalAlignment опции в Aspose.PDF for Python via .NET. Показано, как контролировать позиционирование макета (top, center, bottom, left, right) для точного визуального выравнивания плавающих контейнеров. Каждый плавающий блок получает отдельную позицию, демонстрируя гибкость выравнивания для расположения элементов на странице, размещения заголовков/подвалов или боковых аннотаций.
- Создайте новый PDF-документ.
- Добавьте Page в Document.
- Создайте первый FloatingBox (выравнивание в нижнем правом углу).
- Создайте второй FloatingBox (центр‑правое выравнивание).
- Создайте третий FloatingBox (выравнивание в верхнем правом углу).
- Сохраните Document.
import sys
import aspose.pdf as ap
from os import path
def align_text_to_float(outfile):
# Create PDF document
with ap.Document() as document:
# Add page to pages collection of PDF
page = document.pages.add()
# Create float box
float_box = ap.FloatingBox(100, 100)
# Set settings to float box
float_box.vertical_alignment = ap.VerticalAlignment.BOTTOM
float_box.horizontal_alignment = ap.HorizontalAlignment.RIGHT
float_box.paragraphs.add(ap.text.TextFragment("FloatingBox_bottom"))
float_box.border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.blue)
# Add float box
page.paragraphs.add(float_box)
# Create float box
float_box_2 = ap.FloatingBox(100, 100)
# Set settings to float box
float_box_2.vertical_alignment = ap.VerticalAlignment.CENTER
float_box_2.horizontal_alignment = ap.HorizontalAlignment.RIGHT
float_box_2.paragraphs.add(ap.text.TextFragment("FloatingBox_center"))
float_box_2.border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.blue)
# Add float box
page.paragraphs.add(float_box_2)
# Create float box
float_box_3 = ap.FloatingBox(100, 100)
# Set settings to float box
float_box_3.vertical_alignment = ap.VerticalAlignment.TOP
float_box_3.horizontal_alignment = ap.HorizontalAlignment.RIGHT
float_box_3.paragraphs.add(ap.text.TextFragment("FloatingBox_top"))
float_box_3.border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.blue)
# Add float box
page.paragraphs.add(float_box_3)
# Save the document
document.save(outfile)