PDF for WPF and Silverlight
テキストの測定
PDF for WPF/Silverlight の概要 > 機能:PDF for WPF/Silverlight > テキストの追加 > テキストの測定

多くの場合は、レンダリングする前に文字列がページに収まるかどうかを測定する必要があります。測定には、C1PdfDocument.MeasureString メソッドを使用できます。C1PdfDocument.MeasureString は、文字列が指定されたフォントでレンダリングされるときの幅と高さ(ポイント単位)を含む SizeF 構造体を返します。

たとえば、次のコードは、段落が現在のページに収まるかどうかを確認し、ページに収まらない場合はページ区切りを作成します。これにより、複数の段落を1つのページに収めることができます。

Visual Basic でコードを書く場合

Visual Basic
コードのコピー
Private Function RenderParagraph(text As String, font As Font, rect As Rect, rectPage As Rect) As Rect

    '必要な高さを計算します。
    Dim sz As SizeF = _c1pdf.MeasureString(text, font, rect.Width)
    rect.Height = sz.Height

    'このページに収まらない場合は、ページ区切りを実行します。
    If rect.Bottom > rectPage.Bottom Then
        _c1pdf.NewPage()
        rect.Y = rectPage.Top
    End If

    '文字列を描画します。
    _c1pdf.DrawString(text, font, Colors.Black, rect)

    '次回の処理のために四角形を更新します。
    Rect.Offset(0, rect.Height)
    Return rect
End Function

'RenderParagraphメソッドを使用します。
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# でコードを書く場合

 

C#
コードのコピー
private Rect RenderParagraph(string text, Font font, Rect rect, Rect rectPage)
{
    //必要な高さを計算します。
    SizeF sz = _c1pdf.MeasureString(text, font, rect.Width);
    rect.Height = sz.Height;

    //このページに収まらない場合は、ページ区切りを実行します。
    If (rect.Bottom > rectPage.Bottom)
    {
        _c1pdf.NewPage();
        rect.Y = rectPage.Top;
    }

    //文字列を描画します。
    _c1pdf.DrawString(text, font, Colors.Black, rect);

    //次回の処理のために四角形を更新します。
    Rect.Offset(0, rect.Height);
    return rect;
}

//RenderParagraphメソッドを使用します。
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);
}