Measuring Text
In many cases, you will need to check whether the string will fit on the page before you render it. You can use the C1PdfDocument.MeasureString method for that. C1PdfDocument.MeasureString returns a SizeF structure that contains the width and height of the string (in points) when rendered with a given font.
For example, the code below checks to see if a paragraph will fit on the current page and creates a page break if it has to. This will keep paragraphs together on a page:
Private Function RenderParagraph(text As String, font As Font, rect As Rect, rectPage As Rect) As Rect
' Calculate the necessary height.
Dim sz As SizeF = _c1pdf.MeasureString(text, font, rect.Width)
rect.Height = sz.Height
' If it won't fit this page, do a page break.
If rect.Bottom > rectPage.Bottom Then
_c1pdf.NewPage()
rect.Y = rectPage.Top
End If
' Draw the string.
_c1pdf.DrawString(text, font, Colors.Black, rect)
' Update rectangle for next time.
Rect.Offset(0, rect.Height)
Return rect
End Function
' Use the RenderParagraph method.
Dim font As New Font("Arial", 10)
Dim rectPage As Rect = _c1pdf.PageRectangle()
rectPage.Inflate(-72, -72)
Dim rect As Rect = rectPage
Dim s As String
For Each s In myStringList
rect = RenderParagraph(s, font, rect, rectPage)
Next s
•C#
private Rect RenderParagraph(string text, Font font, Rect rect, Rect rectPage)
{
// Calculate the necessary height.
SizeF sz = _c1pdf.MeasureString(text, font, rect.Width);
rect.Height = sz.Height;
// If it won't fit this page, do a page break.
If (rect.Bottom > rectPage.Bottom)
{
_c1pdf.NewPage();
rect.Y = rectPage.Top;
}
// Draw the string.
_c1pdf.DrawString(text, font, Colors.Black, rect);
// Update rectangle for next time.
Rect.Offset(0, rect.Height);
return rect;
}
// Use the RenderParagraph method.
Font font = new Font("Arial", 10);
Rect rectPage = _c1pdf.PageRectangle();
rectPage.Inflate(-72, -72);
Rect rect = rectPage;
foreach (string s in myStringList)
{
rect = RenderParagraph(s, font, rect, rectPage);
}