Add multiline text to a PDF document

Add multiline text to a PDF document

The MultilineTextShape lets you add multiline text to PDF with mixed formatting and line-breaking.

The content of the multiline text is specified as a collection of fragments. A fragment has properties that specify both content (text) and appearance (font, font size, color). All fragments will be displayed concatenated and broken across lines as needed.

C# code sample that add multiline text to PDF

The following adds a MultilineTextShape to the horizontal center of a PDF document:

const string text =
   "With PDFKit.NET you can Manipulate existing " +
   "PDF documents and forms using a highly intuitive object model. " +
   "Add pages, stamp content and fill forms.";

// create a new document with a single page
Document document = new Document();
Page page = new Page(PageSize.Letter);
document.Pages.Add(page);

// add a shapes collection at the center of the page
// it will be the container for multiline text shapes
ShapeCollection shapes = new ShapeCollection
{
    Width = page.Width / 2,
    Height = page.Height * 0.85
};
shapes.Transform = new TranslateTransform
{
    X = (page.Width - shapes.Width) / 2,
    Y = (page.Height - shapes.Height) / 2
};
page.Overlay.Add(shapes);

// dock text to the top of the shapes collection - align left
const int bottomMargin = 20;
Fragment fragment = new Fragment(text, Font.TimesRoman, 16);
MultilineTextShape multilineText = new MultilineTextShape
{
    Dock = DockStyle.Top,
    Margin = { Bottom = bottomMargin }
};
multilineText.Fragments.Add(fragment);
shapes.Add(multilineText);

// save result
using (FileStream file = new FileStream(@"..\..\dockmultilinetext.pdf", FileMode.Create, FileAccess.Write))
{
    document.Write(file);
}
' create a new document
Dim document As New Document()

' append a new page (portrait Letter)
Dim landscape As Boolean = False
Dim page As New Page(PageSize.Letter, landscape)
document.Pages.Add(page)

' stamp a text paragraph at the center
Dim multilineText As New MultilineTextShape()
Dim translate As New TranslateTransform()
multilineText.Transform = translate

Dim fragment As New Fragment(text, Font.TimesRoman, 12)
multilineText.Fragments.Add(fragment)

' center horizontally
multilineText.Width = page.Width / 2
translate.X = (page.Width - multilineText.Width) / 2

' Y corresponds to the top of the paragraph
translate.Y = page.Height / 2

page.VisualOverlay.Add(multilineText)

Using file As New FileStream("..\..\multilinetext.pdf", FileMode.Create, FileAccess.Write)
    document.Write(file)
End Using

The text will be automatically split up into multiple lines based on the Width you specified. The resulting PDF will look like this:

Add Multiline Text To Pdf

In addition, you can set the Height property but this is used if the multiline text shape is auto-sized. This is the case if and only if there is exactly one fragment that has a zero font size.