PDF for .NET
テキストの測定

多くの場合、テキストを描画する前にテキストがページに収まるかどうかをチェックする必要があります。そのためには、MeasureString メソッドを使用できます。MeasureString は、指定のフォントで描画するときのテキストの幅と高さ(ポイント単位)を含む SizeF 構造を返します。

たとえば以下のコードでは、段落が現在のページに収まるかどうかを調べ、必要に応じてページ区切りを挿入します。これにより、段落を1ページ内にまとめることができます。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Private Function RenderParagraph(text As String, font As Font, rect As RectangleF, rectPage As RectangleF) As Rectangle
   '必要な高さを計算します。
    Dim sz As SizeF = C1PdfDocument1.MeasureString(text, font, rect.Width)
    rect.Height = sz.Height
   'このページに収まらない場合、ページ区切りを挿入します。
    If rect.Bottom > rectPage.Bottom Then
     C1PdfDocument1.NewPage()
     rect.Y = rectPage.Top
    End If
    'テキストを描画します。
     C1PdfDocument1.DrawString(text, font, Brushes.Black, rect)
     '次回の四角形を更新します。
    rect.Offset(0, rect.Height)
    Return rect
End Function
'RenderParagraph メソッドを使用します。
Dim font As New Font("Arial", 10)
Dim rectPage As RectangleF = _c1pdf.PageRectangle
rectPage.Inflate(-72, -72)
Dim rect As RectangleF = rectPage
Dim s As String
For Each s In myStringList
rect = RenderParagraph(s, font, rect, rectPage)
Next s

C# コードの書き方

C#
コードのコピー
private RectangleF RenderParagraph(string text, Font font, RectangleF rect, RectangleF rectPage)
{ //必要な高さを計算します。 SizeF sz = C1PdfDocument1.MeasureString(text, font, rect.Width); rect.Height = sz.Height; //このページに収まらない場合、ページ区切りを挿入します。 if (rect.Bottom > rectPage.Bottom) { c1PdfDocument1.NewPage(); rect.Y = rectPage.Top; } //テキストを描画します。 c1PdfDocument1.DrawString(text, font, Brushes.Black, rect); //次回の四角形を更新します。 rect.Offset(0, rect.Height); return rect; } //RenderParagraph メソッドを使用します。 Font font = new Font("MS PGothic", 10); RectangleF rectPage = c1PdfDocument1.PageRectangle; rectPage.Inflate(-72, -72); RectangleF rect = rectPage; foreach (string s in myStringList) { rect = RenderParagraph(s, font, rect, rectPage); }