KeepWithNext.vb
''
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
'' このサンプルは、TextLayout を分割するときに、段落と次の段落の間で改ページを防ぐ方法を示します。
'' このサンプルのテキストの分割は、PaginatedText のテキストの分割と似た仕組みになっています。
'' テキスト処理の詳細については、PaginatedText のコメントを参照してください。
Public Class KeepWithNext
Function CreatePDF(ByVal stream As Stream) As Integer
Const NPAR = 40
Dim doc = New GcPdfDocument()
Dim tl = New TextLayout(72) With
{
.FirstLineIndent = 72 / 2,
.MaxWidth = doc.PageSize.Width,
.MaxHeight = doc.PageSize.Height,
.MarginAll = 72
}
tl.DefaultFormat.Font = Util.getFont()
tl.DefaultFormat.FontSize = 12
'' キャプションのテキスト書式を設定します
Dim tf = New TextFormat(tl.DefaultFormat) With
{
.FontSize = tl.DefaultFormat.FontSize + 2,
.FontBold = True
}
'' ドキュメントにキャプションとランダムな段落(文のまとまり)をいくつか追加します。
For i = 0 To NPAR - 1
'' キャプションを追加します
tl.Append("このキャプションと次の段落は同じページに表示されます。", tf)
'' AppendParagraphBreakを使うことで段落を分けつつ、キャプションと続く段落がページをまたがないようにしています。
tl.AppendParagraphBreak()
'' キャプションの後に続く、ランダムな段落を追加します。
tl.Append(Util.getString_ja(0, 0, 1))
Next
tl.PerformLayout(True)
'' すべての段落行が同じページに収まるよう強制します。
'' これを追加することで、キャプションとその後に続く段落が
'' 同じページに配置されることが、より確実となります。
Dim tso = New TextSplitOptions(tl) With
{
.KeepParagraphLinesTogether = True
}
'' ループ内で、テキストを分割してレンダリングします。
While (True)
'' 「rest」は、適合しなかったテキストを受け入れます。
Dim rest As TextLayout = Nothing
Dim splitResult = tl.Split(tso, rest)
doc.Pages.Add().Graphics.DrawTextLayout(tl, PointF.Empty)
If (splitResult <> SplitResult.Split) Then
Exit While
End If
tl = rest
End While
'' PDF ドキュメントを保存します。
doc.Save(stream)
Return doc.Pages.Count
End Function
End Class