PDF for WinRT
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:

Visual Basic
Copy Code
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#
Copy Code
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);
}

 

 


Copyright (c) GrapeCity, inc. All rights reserved.

Product Support Forum  |  Documentation Feedback