Использование FloatingBox для разметки PDF в Java
Aspose.PDF for Java использует FloatingBox для создания многоразовых текстовых контейнеров и макетов на основе колонок.
Создание и добавление плавающего блока
Используйте этот пример, когда текст следует разместить внутри обрамлённого плавающего контейнера.
- Создайте новый PDF‑документ и добавьте страницу.
- Создайте
FloatingBox, установите его размер и границу, а также добавьте текстовое содержимое. - Добавьте блок на страницу и сохраните документ.
public static void createAndAddFloatingBox(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
FloatingBox box = new FloatingBox(400, 30);
box.setBorder(new BorderInfo(BorderSide.All, 1.5f, Color.getDarkGreen()));
box.setNeedRepeating(false);
String phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi.";
box.getParagraphs().add(new TextFragment(phrase));
page.getParagraphs().add(box);
document.save(outputFile.toString());
}
}
Создание повторяющегося многоколоночного макета
Используйте этот пример, когда длинный текст должен протекать через несколько колонок внутри одного плавающего блока.
- Создайте страницу и настройте поля.
- Вычислите ширины столбцов и настройте параметры колонок
FloatingBox. - Добавьте повторяющиеся фрагменты текста в блок и сохраните документ.
public static void multiColumnLayout(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
page.getPageInfo().setMargin(new MarginInfo(36, 18, 36, 18));
int columnCount = 3;
int spacing = 10;
double width = page.getPageInfo().getWidth()
- page.getPageInfo().getMargin().getLeft()
- page.getPageInfo().getMargin().getRight()
- (columnCount - 1) * spacing;
double columnWidth = width / 3;
FloatingBox box = new FloatingBox();
box.setNeedRepeating(true);
box.getColumnInfo().setColumnWidths(columnWidth + " " + columnWidth + " " + columnWidth);
box.getColumnInfo().setColumnSpacing(String.valueOf(spacing));
box.getColumnInfo().setColumnCount(3);
String phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi.";
for (int i = 0; i < 10; i++) {
box.getParagraphs().add(new TextFragment(phrase));
}
page.getParagraphs().add(box);
document.save(outputFile.toString());
}
}
Размещение каждого фрагмента в начале столбца
Используйте этот пример, когда каждый вставленный фрагмент должен начинать новый сегмент потока колонок.
- Создайте страницу и настройте многоколоночный
FloatingBox. - Создайте фрагменты текста и пометьте их
setFirstParagraphInColumn(true). - Добавьте блок на страницу и сохраните PDF.
public static void multiColumnLayout2(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
page.getPageInfo().setMargin(new MarginInfo(36, 18, 36, 18));
int columnCount = 3;
int spacing = 10;
double width = page.getPageInfo().getWidth()
- page.getPageInfo().getMargin().getLeft()
- page.getPageInfo().getMargin().getRight()
- (columnCount - 1) * spacing;
double columnWidth = width / 3;
FloatingBox box = new FloatingBox();
box.setNeedRepeating(true);
box.getColumnInfo().setColumnWidths(columnWidth + " " + columnWidth + " " + columnWidth);
box.getColumnInfo().setColumnSpacing(String.valueOf(spacing));
box.getColumnInfo().setColumnCount(3);
String phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi.";
for (int i = 0; i < 10; i++) {
TextFragment text = new TextFragment(phrase);
text.setFirstParagraphInColumn(true);
box.getParagraphs().add(text);
}
page.getParagraphs().add(box);
document.save(outputFile.toString());
}
}
Добавление плавающего блока с цветом фона
Используйте этот пример, когда плавающий контейнер должен иметь видимую заливку фона.
- Создайте новый PDF‑документ и добавьте страницу.
- Создайте
FloatingBox, задайте его цвет фона и добавьте текст. - Поместите блок на страницу и сохраните документ.
public static void backgroundSupport(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
FloatingBox box = new FloatingBox(400, 30);
box.setBackgroundColor(Color.getLightGreen());
box.setNeedRepeating(false);
box.getParagraphs().add(new TextFragment("text example"));
page.getParagraphs().add(box);
document.save(outputFile.toString());
}
}
Размещение плавающего блока с абсолютными смещениями
Используйте этот пример, когда плавающий блок должен появиться с точным смещением на странице.
- Создайте страницу и подготовьте окружающий текстовый контент.
- Создайте
FloatingBox, установите абсолютное позиционирование и задайте смещения сверху и слева. - Добавьте содержимое на страницу и сохраните документ.
public static void offsetSupport(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
FloatingBox box = new FloatingBox(400, 30);
box.setTop(45);
box.setLeft(15);
box.setPositioningMode(ParagraphPositioningMode.Absolute);
box.setBorder(new BorderInfo(BorderSide.All, 1.5f, Color.getDarkGreen()));
box.getParagraphs().add(new TextFragment("text example 1"));
page.getParagraphs().add(new TextFragment("text example 2"));
page.getParagraphs().add(box);
page.getParagraphs().add(new TextFragment("text example 3"));
document.save(outputFile.toString());
}
}
Выравнивание текста внутри плавающих блоков
Используйте этот пример, когда плавающие блоки должны демонстрировать разные вертикальные выравнивания при одинаковом горизонтальном выравнивании.
- Создайте новый PDF‑документ и добавьте страницу.
- Создайте несколько объектов
FloatingBoxс различными настройками выравнивания. - Добавьте их на страницу и сохраните результат.
public static void alignTextToFloat(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
FloatingBox floatBox = new FloatingBox(100, 100);
floatBox.setVerticalAlignment(VerticalAlignment.Bottom);
floatBox.setHorizontalAlignment(HorizontalAlignment.Right);
floatBox.getParagraphs().add(new TextFragment("FloatingBox_bottom"));
floatBox.setBorder(new BorderInfo(BorderSide.All, Color.getBlue()));
page.getParagraphs().add(floatBox);
FloatingBox floatBox2 = new FloatingBox(100, 100);
floatBox2.setVerticalAlignment(VerticalAlignment.Center);
floatBox2.setHorizontalAlignment(HorizontalAlignment.Right);
floatBox2.getParagraphs().add(new TextFragment("FloatingBox_center"));
floatBox2.setBorder(new BorderInfo(BorderSide.All, Color.getBlue()));
page.getParagraphs().add(floatBox2);
FloatingBox floatBox3 = new FloatingBox(100, 100);
floatBox3.setVerticalAlignment(VerticalAlignment.Top);
floatBox3.setHorizontalAlignment(HorizontalAlignment.Right);
floatBox3.getParagraphs().add(new TextFragment("FloatingBox_top"));
floatBox3.setBorder(new BorderInfo(BorderSide.All, Color.getBlue()));
page.getParagraphs().add(floatBox3);
document.save(outputFile.toString());
}
}