Block
The Block class is intended to arrange the elements added to it in a flow-like manner. It can be used for measuring, drawing, and splitting of FixedContentElements.
Add and Modify Content
The most common usage of Block is to draw flowing content. Similarly to FixedContentEditor, a block can contain images, graphics or text. The same Block instance can only be drawn once.
Inserting Text
Inserting TextFragments is achieved with one of the overloads of the Insert() method. Example 1 shows a simple insert by passing a string to the method.
Example 1: Insert text
Block block = new Block();
block.InsertText("Text");
Example 2 demonstrates how to insert text with a specific font family.
Example 2: Insert text with Arial font family
block.InsertText(new FontFamily("Arial"), "Text");
Example 3: Insert styled text
block.InsertText(new FontFamily("Arial"), FontStyles.Italic, FontWeights.Bold, "Text");
The '\r' and '\n' characters don't have the usual meaning of "go to next line" when they are inserted into a PDF document and you cannot simply insert text containing these characters to produce multiline text. Instead, you should insert a line break.
Inserting Line Break
Inserting a line break results in the next element starting on a new line. The action is achieved with the InsertLineBreak() method as shown in Example 4.
Example 4: Break the line
block.InsertLineBreak();
Inserting Image
Block provides the following methods for inserting images:
- block.InsertImage(imageSource);
- block.InsertImage(stream);
- block.InsertImage(imageSource, size);
- block.InsertImage(stream, size);
- block.InsertImage(imageSource, width, height);
- block.InsertImage(stream, width, height);
Information on images in the context of the library is available in the ImageSource and Image articles.
Inserting Geometries
Geometries allow you to describe 2D shapes in a document. The following methods can be used to insert different geometries.
- block.InsertCircle(center, radius);
- block.InsertEllipse(center, radiusX, radiusY);
- block.InsertLine(point1, point2);
- block.InsertPath(geometry);
- block.InsertRectangle(rectangle);
Inserting Form-XObject Elements
The Form (or also known as Form-XObject) is an object that can contain PDF content and can be sheared among the document. The Block class exposes the InsertForm() method that allows you insert a FormSource object in the document.
Example 5: Insert a form
block.InsertForm(simpleForm);
For more information on how to create a form, check the Form and FormSource articles.
Changing Current Styles
The Block class has some properties and methods that affect how it will be rendered:
SpacingBefore: Represent the spacing before.
SpacingAfter: Represents the spacing after.
LineSpacing: The spacing between the lines.
LineSpacingType: Specifies how to interpret the line spacing.
FirstLineIndent: The indent for the first line.
LeftIndent: The left indent.
RightIndent: The right indent.
BackgroundColor: The background color.
HorizontalAlignment: The horizontal alignment of the content.
VerticalAlignment: The vertical alignment of the content.
Bullet: The element that should be rendered as Block’s list bullet.
IndentAfterBullet: The indent size after the bullet element.
TextProperties and GraphicProperties: Responsible for text and graphic properties. For more information see the Text and Graphic Properties article.
SaveTextProperties(): Saves the TextProperties. It returns an IDisposable object which when disposed calls RestoreTextProperties() and can be used in using statement.
RestoreTextProperties(): Restores the TextProperties to their previous state.
SaveGraphicProperties(): Saves the GraphicProperties. It returns an IDisposable object which when disposed calls RestoreTextProperties() and can be used in using statement.
RestoreGraphicProperties(): Restores the GrahpicPropertie to their previous state.
SaveProperties(): Saves both text and graphic properties. It returns an IDisposable object which when disposed calls RestoreTextProperties() and can be used in using statement.
RestoreProperties(): Restores both text and graphic properties.
SetBullet(List list, int listLevel): This method helps you to easily set bullet related properties respecting the numbering and the formatting of some List class instance. More information about lists you may find in this article.
Clear(): Clears all elements in the block.
Example 6: Change Block properties
Block block = new Block();
block.InsertText("block content");
block.SpacingBefore = 10;
block.SpacingAfter = 5;
block.LineSpacingType = HeightType.Exact;
block.LineSpacing = 15;
block.FirstLineIndent = 12;
block.LeftIndent = 0;
block.RightIndent = 0;
block.BackgroundColor = RgbColors.White;
block.HorizontalAlignment = Telerik.Windows.Documents.Fixed.Model.Editing.Flow.HorizontalAlignment.Left;
block.VerticalAlignment = Telerik.Windows.Documents.Fixed.Model.Editing.Flow.VerticalAlignment.Top;
var textFragment = new TextFragment();
textFragment.Text = "test bullet";
block.Bullet = textFragment;
block.IndentAfterBullet = 5;
Drawing a Block
A Block can be drawn to the content using the Draw() method. The method accepts as a parameter a Rectangle, specifying the desired size and position relatively to the editor of the element.
Example 7: Draw block
Rect boundingRect = new Rect(new Point(0, 0), new Size(200, 300));
block.Draw(fixedContentEditor, boundingRect);
Every block can be drawn only once. Otherwise, an exception will be thrown.
Measuring Block Size
Measuring a Block can be achieved with one of the overloads of the Measure() method. Invoking the method without a parameter will return the desired size of the elements in the block and set the block's DesiredSize property. The method is handy when you want to determine the size of the Block. When you want to wrap the text or you page has a limited space make sure to pass the available size to the method.
Calling the overload accepting available size measures the block in that specific size. Additionally to setting the DesiredSize property, it sets the PendingElements property with a collection of the elements that could not fit in the available size.
Example 8 creates a Block with the text "Hello RadPdfProcessing!" and measures it.
Example 8: Measure block
Block block = new Block();
block.InsertText("Hello RadPdfProcessing!");
Size size = block.Measure();
Splitting a Block
The Split() method of a Block returns a new Block with the same properties. The resulting block contains all pending elements that do not fit in the current block, based on the result of the last measure call.
The code in Example 9 splits a block in two. The first will contains text "Hello" and the second – "RadPdfProcessing!".
Example 9: Split block
Block helloBlock = new Block();
helloBlock.InsertText("Hello");
Size helloSize = helloBlock.Measure();
Block block = new Block();
block.InsertText("Hello RadPdfProcessing!");
Size size = block.Measure(helloSize);
Block secondBlock = block.Split();