Использование FloatingBox для генерации текста

Эта функция также работает в библиотеке Aspose.PDF.Drawing.

Основы использования инструмента FloatingBox

Инструмент Floating Box - это специальный инструмент для размещения текста и другого содержимого на странице PDF. Его основная особенность - обрезка текста, когда он выходит за размеры FloatingBox.

Document document = new Document();
Page page = document.Pages.Add();
var box = new FloatingBox(400, 30)
{
    Border = new BorderInfo(BorderSide.All, 1.5f, Color.DarkGreen),
    IsNeedRepeating = false,
};
var text = LoremNET.Lorem.Paragraph(20, 6);
box.Paragraphs.Add(new TextFragment(text));
page.Paragraphs.Add(box);

В приведенном выше примере мы создаем FloatingBox шириной 400 pt и высотой 30 pt. Также в этом примере было намеренно создано больше текста, чем могло поместиться в заданном размере. В результате текст был обрезан.

Image 1

Свойство IsNeedRepeating со значением false ограничивает текст одной страницей.

Если мы установим это свойство в true, текст будет перенесен на следующую страницу в той же позиции.

Image 2

Расширенные возможности FloatingBox

Поддержка многоколоночного вывода

Многоколоночное расположение (простой случай)

FloatingBox поддерживает многоколоночное расположение. Чтобы создать такое расположение, вы должны определить значения свойств ColumnInfo.

  • ColumnWidths - строка с перечислением ширины в pt.
  • ColumnSpacing - строка с шириной зазора между колонками.
  • ColumnCount - количество колонок.
Document document = new Document();
Page page = document.Pages.Add();
page.PageInfo.Margin = new MarginInfo(36, 18, 36, 18);
var columnCount = 3;
var spacing = 10;
var width = page.PageInfo.Width 
    - page.PageInfo.Margin.Left 
    - page.PageInfo.Margin.Right 
    - (columnCount - 1) * spacing;
var columnWidth = width / 3;
var box = new FloatingBox()
{
    IsNeedRepeating = true
};
box.ColumnInfo.ColumnWidths = $"{columnWidth} {columnWidth} {columnWidth}";
box.ColumnInfo.ColumnSpacing = "{spacing}";
box.ColumnInfo.ColumnCount = columnCount;
var paragraphs = LoremNET.Lorem.Paragraphs(20, 8, 20);
foreach (var paragraph in paragraphs)
{
    box.Paragraphs.Add(new TextFragment(paragraph));
}

page.Paragraphs.Add(box);

document.Save("sample.pdf");

Мы использовали дополнительную библиотеку LoremNET в приведенном выше примере и создали 20 абзацев. Эти абзацы были разделены на три колонки и заполнили следующие страницы, пока текст не закончился.

Макет многостолбцовой компоновки с принудительным началом колонки

Мы сделаем то же самое с следующим примером, как и в предыдущем. Разница в том, что мы создали 3 абзаца. Мы можем заставить FloatingBox отрисовывать каждый абзац в новой колонке. Для этого нам нужно установить IsFirstParagraphInColumn при добавлении текста в объект FloatingBox.

Document document = new Document();
Page page = document.Pages.Add();
page.PageInfo.Margin = new MarginInfo(36, 18, 36, 18);
var columnCount = 3;
var spacing = 10;
var width = page.PageInfo.Width 
    - page.PageInfo.Margin.Left 
    - page.PageInfo.Margin.Right 
    - (columnCount - 1) * spacing;
var columnWidth = width / 3;
var box = new FloatingBox()
{
    IsNeedRepeating = true
};
box.ColumnInfo.ColumnWidths = $"{columnWidth} {columnWidth} {columnWidth}";
box.ColumnInfo.ColumnSpacing = "{spacing}";
box.ColumnInfo.ColumnCount = 3;

var paragraphs = LoremNET.Lorem.Paragraphs(20, 8, 3);
foreach (var paragraph in paragraphs)
{
    var text = new TextFragment(paragraph)
    {
        IsFirstParagraphInColumn = true
    };
    box.Paragraphs.Add(text);
}

page.Paragraphs.Add(box);

document.Save("sample.pdf");

Поддержка фона

Вы можете установить желаемый цвет фона, используя свойство BackgroundColor.

// Инициализация объекта документа
Document document = new Document();
Page page = document.Pages.Add();
var box = new FloatingBox(400, 60)
{
    IsNeedRepeating = false,
    BackgroundColor = Color.LightGreen,
};
var text = LoremNET.Lorem.Paragraph(20, 6);
box.Paragraphs.Add(new TextFragment(text));
page.Paragraphs.Add(box);

Поддержка смещения

FloatingBox может быть смещён в другое место, установив значения Top и Left.

Document document = new Document();
Page page = document.Pages.Add();

var box = new FloatingBox()
{
    Top = -45,
    Left = 15,
    Border = new BorderInfo(BorderSide.All, 1.5f, Color.DarkGreen)
};
var text = LoremNET.Lorem.Paragraph(20, 6);
box.Paragraphs.Add(new TextFragment(text));

page.Paragraphs.Add(new TextFragment(LoremNET.Lorem.Paragraph(20, 6)));
page.Paragraphs.Add(box);            
page.Paragraphs.Add(new TextFragment(LoremNET.Lorem.Paragraph(20, 6)));