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 = StandardFonts.Times
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("Caption kept together with the next paragraph. No page break after this.", tf)
'' AppendParagraphBreak は段落区切りを追加しますが、2つの段落間の改ページを防ぎます。
tl.AppendParagraphBreak()
'' キャプションの後のランダムな段落。
tl.Append(Util.LoremIpsum(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