How to add autosized text to PDF

Fonts, Manipulate PDF
7/15/2015

This code sample shows you how you can add a piece of auto-sized text to your PDF document.

This can be done by creating a MultiLineTextShape with a textfragment of size 0 (which means autosize) and setting the boundaries of the text shape.

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
Document document = new Document();

// append a new page (portrait Letter)
bool landscape = false;
Page page = new Page(PageSize.Letter, landscape);
document.Pages.Add(page);

// stamp a multiline text shape
// note that the font size is set to 0 - this will autosize the text
MultilineTextShape multilineText = new MultilineTextShape();
Fragment fragment = new Fragment(text, Font.TimesRoman, 0);
multilineText.Fragments.Add(fragment);

// set boundaries of the text
multilineText.Width = page.Width / 4;
multilineText.Height = 75;

// center
TranslateTransform translate = new TranslateTransform();
multilineText.Transform = translate;
translate.X = (page.Width - multilineText.Width) / 2;
translate.Y = (page.Height - multilineText.Height) / 2 + multilineText.Height;

// add a rectangle shape to visualize the boundary of the text
RectangleShape rectangle = new RectangleShape(
    multilineText.X, multilineText.Y - multilineText.Height,
    multilineText.Width, multilineText.Height,
    null, new SolidBrush(System.Drawing.Color.Salmon));

// add both shapes
page.Overlay.Add(rectangle);
page.Overlay.Add(multilineText);

using (FileStream file = new FileStream(@"..\..\autosizetext.pdf", FileMode.Create, FileAccess.Write))
{
    document.Write(file);
}
Const  text As String = "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
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 multiline text shape
' note that the font size is set to 0 - this will autosize the text
Dim multilineText As New MultilineTextShape()
Dim fragment As New Fragment(text, Font.TimesRoman, 0)
multilineText.Fragments.Add(fragment)

' set boundaries of the text
multilineText.Width = page.Width / 4
multilineText.Height = 75

' center
Dim translate As New TranslateTransform()
multilineText.Transform = translate
translate.X = (page.Width - multilineText.Width) / 2
translate.Y = (page.Height - multilineText.Height) / 2 + multilineText.Height

' add a rectangle shape to visualize the boundary of the text
Dim rectangle As New RectangleShape(multilineText.X, multilineText.Y - multilineText.Height, multilineText.Width, multilineText.Height, Nothing, New SolidBrush(System.Drawing.Color.Salmon))

' add both shapes
page.Overlay.Add(rectangle)
page.Overlay.Add(multilineText)

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