多くの場合は、レンダリングする前に文字列がページに収まるかどうかを測定する必要があります。測定には、C1PdfDocument.MeasureString メソッドを使用できます。C1PdfDocument.MeasureString は、文字列が指定されたフォントでレンダリングされるときの幅と高さ(ポイント単位)を含む SizeF 構造体を返します。
たとえば、次のコードは、段落が現在のページに収まるかどうかを確認し、ページに収まらない場合はページ区切りを作成します。これにより、複数の段落を1つのページに収めることができます。
Visual Basic |
コードのコピー
|
---|---|
Private Function RenderParagraph(text As String, font As Font, rect As Rect, rectPage As Rect) As Rect ' 必要な高さを計算します。 Dim sz As SizeF = pdf.MeasureString(text, font, rect.Width) rect.Height = sz.Height ' このページに収まらない場合は、ページ区切りを実行します。 If rect.Bottom > rectPage.Bottom Then pdf.NewPage() rect.Y = rectPage.Top End If ' 文字列を描画します。 pdf.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 = pdf.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) { // 必要な高さを計算します。 SizeF sz = pdf.MeasureString(text, font, rect.Width); rect.Height = sz.Height; // このページに収まらない場合は、ページ区切りを実行します。 If (rect.Bottom > rectPage.Bottom) { pdf.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 = pdf.PageRectangle(); rectPage.Inflate(-72, -72); Rect rect = rectPage; foreach (string s in myStringList) { rect = RenderParagraph(s, font, rect, rectPage); } |