Usando FloatingBox para la generación de texto
Esta característica también funciona en la biblioteca Aspose.PDF.Drawing.
Conceptos básicos sobre el uso de la herramienta FloatingBox
La herramienta Floating Box es una herramienta especial para colocar texto y otros contenidos en una página PDF. Su característica principal es el recorte de texto cuando se superpone al tamaño del 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);
En el ejemplo anterior, estamos creando un FloatingBox con un ancho de 400 pt y una altura de 30 pt. Además, en este ejemplo, se creó intencionalmente más texto del que podría caber en el tamaño dado. Como resultado, el texto fue cortado.
La propiedad IsNeedRepeating
con valor false
limita el texto a 1 página.
Si configuramos esta propiedad en true
, el texto fluirá a la siguiente página en la misma posición.
Funciones avanzadas de FloatingBox
Soporte multi-columna
Diseño de múltiples columnas (caso simple)
FloatingBox
soporta un diseño de múltiples columnas. Para crear tal diseño, debes definir los valores de las propiedades de ColumnInfo.
ColumnWidths
es una cadena con enumeración de ancho en pt.ColumnSpacing
es una cadena con el ancho del espacio entre columnas.ColumnCount
es un número de columnas.
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");
Usamos la librería adicional LoremNET en el ejemplo anterior y creamos 20 párrafos. Estos párrafos se dividieron en tres columnas y llenaron las páginas siguientes hasta que se agotó el texto.
Diseño de varias columnas con inicio de columna forzado
Haremos lo mismo con el siguiente ejemplo como en el anterior. La diferencia es que creamos 3 párrafos. Podemos forzar a FloatingBox a renderizar cada párrafo en una nueva columna. Para hacer eso, necesitamos establecer IsFirstParagraphInColumn
cuando agregamos texto al objeto 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");
Soporte de fondo
Puedes establecer el color de fondo deseado utilizando la propiedad BackgroundColor
.
// Inicializar el objeto documento
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);
Soporte de desplazamiento
FloatingBox puede ser desplazado a otra ubicación estableciendo los valores Top
y 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)));